我有一个简单的函数来读取.txt文件中的行:
function loadData(file_name, root_path)
-- here, file_name is './list.txt', path is '../data/my/'
for line in io.lines(file_name) do
local data = {}
base_path = root_path .. line
-- so, base_path is something like ../data/my/001
data.file = base_path .. '_color.png'
print(data)
end
end
我希望数据应该是{file:"../data/my/001_color.png;},但我得到了{_color.png"./data/my/001}
有人能帮我吗?谢谢
检查./list.txt
文件内容的EOL(行尾(,因为它可能在windows上生成(EOL=CR LF(,也可能在linux上解释(EOL=LF(。io.lines
在linux上将CR字符转换为字符串!
你的程序使一切都正确,但你的数据不是。
假设./list.txt
中的第一行是../data/my/001rn
line
变量是../data/my/001r
(print(#line)
给出15而不是14(。print
中的回车(CR(将光标移动到不改变行的起始行位置。在这种情况下,您的print
输出与{file: "../data/my/001r_color.png"}
类似(因为它取决于print
的实现(,并且您得到输出:
{file: "../data/my/001
_color.png"} <-- on the same line
让我们把它结合起来:
_color.png"}ata/my/001
纠正此问题:
- 提供不带CR的文件(在所有系统上都能正常工作(
- 在第一行添加循环:
line = line:gsub('[rn]','')
以删除CR LF