lua table string concat not correct

我有一个简单的函数从.txt文件中读取行:

    function loadData(file_name, root_path)
    -- 这里,file_name是'./list.txt',root_path是'../data/my/'


        for line in io.lines(file_name) do
            local data = {}
            base_path = root_path .. line
            -- 所以,base_path是类似../data/my/001的东西
            data.file = base_path .. '_color.png'
            print(data)
        end
    end

我希望数据应该是 **{file: "../data/my/001_color.png"}**,但我得到了 {_color.png" ../data/my/001}

有谁能帮我吗?谢谢!

点赞
用户12918181
用户12918181

请检查你的./list.txt文件内容以查看EOL(行尾)是否在Windows上生成(EOL = CR LF)并解释为Linux上的LF(EOL = LF)。io.lines在Linux上将CR字符转换为行字符串!

你的程序做得很对,但数据不对。

假设./list.txt中的第一行是../data/my/001\r\nline变量是../data/my/001\rprint(#line)结果为15而不是14)。 回车符(CR)在print中将光标移到行开头位置而不换行。 在这种情况下,你的print输出类似于{file: "../data/my/001\r_color.png"}(因为它取决于print实现),并且你会得到输出:

{file: "../data/my/001
_color.png"}                 <-- 在同一行上

让我们将其结合起来:

_color.png"}ata/my/001

为了更正:

  • 提供CR的文件(在所有系统上都可以正确运行)
  • 在第一行循环中添加:line = line:gsub('[\r\n]', '')以去除CR LF
2020-08-17 15:07:09