0

我有一个简单的函数来从 .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}

谁能帮我?谢谢!

4

1 回答 1

0

检查您的./list.txt文件内容的 EOL(行尾),因为它可能在 Windows 上生成(EOL=CR LF),在 linux 上解释(EOL=LF)。io.lines将 CR 字符转换为 linux 上的行字符串!

您的程序使一切正确,但您的数据不是。

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

{file: "../data/my/001
_color.png"}                 <-- on the same line

让我们结合起来:

_color.png"}ata/my/001

要纠正这一点:

  • 提供没有CR 的文件(在所有系统上都能正常工作)
  • 在第一行添加循环:line = line:gsub('[\r\n]','')删除 CR LF
于 2020-08-17T15:07:09.320 回答