用于读取 CSV 的 Lua 脚本在最后一行产生不正确的输出格式

问题描述 投票:0回答:1

问题描述

我正在编写一个 Lua 脚本来读取 CSV 文件并将每一行解析到一个表中。在处理 CSV 文件时,我注意到最后一行的输出格式不正确。

这是我的代码的关键部分:

function split(s, delimiter)
    local result = {};
    for match in (s..delimiter):gmatch("(.-)"..delimiter) do
        table.insert(result, match);
    end
    return result;
end



function readCSV(filename)
    local file = io.open(filename, "r")
    if not file then
        error("Failed to open file: " .. filename)
    end

    local header = file:read()
    local headerArr = split(header, ",")
    print("length of headerArr: " .. #headerArr)
    for i, value in ipairs(headerArr) do
        print(i, value)
    end

    local data = {}

    for line in file:lines() do
        line = line:gsub("\n", ""):gsub("\r", "")
        print("line: " .. line)
        local valuesArr = split(line, ",")
        print("length of valuesArr: " .. #valuesArr)

        for i, value in ipairs(valuesArr) do
            -- print(i, value)
        end

        local entry = {}

        for i = 1, #valuesArr do
            print("headerArr[" .. i .. "]:" .. headerArr[i])
            print("valuesArr[" .. i .. "]:" .. valuesArr[i])
            -- print("headerArr[" .. i .. "] key = '" .. headerArr[i] .. "' , value = " .. valuesArr[i])
            print(string.format("headerArr[%d] key = '%s' , value = '%s'", i, headerArr[i], valuesArr[i]))
            print("-------------------------------------------------")
        end

        for key, value in pairs(entry) do
            -- print(">>> Entry[" .. key .. "]: " .. value)
        end

        -- table.insert(data, entry)
    end

    file:close()

    return data
end

-- Usage example
local filename = "/Users/weijialiu/Downloads/FC 24 CT v24.1.1.4/FC_24_LE_ICONS.csv"
local data = readCSV(filename)

-- Print the data
for i, entry in ipairs(data) do
    for header, value in pairs(entry) do
        print(header .. ": " .. value)
    end
    print("--------------------")
end

问题详情

处理CSV文件时,最后一行的输出格式不正确。具体来说,问题表现为:

...
headerArr[1021]:runningcode2
valuesArr[1021]:0
headerArr[1021] key = 'runningcode2' , value = '0'
-------------------------------------------------
headerArr[1022]:modifier
valuesArr[1022]:2
headerArr[1022] key = 'modifier' , value = '2'
-------------------------------------------------
headerArr[1023]:gkhandling
valuesArr[1023]:9
headerArr[1023] key = 'gkhandling' , value = '9'
-------------------------------------------------
headerArr[1024]:eyecolorcode
valuesArr[1024]:2
' , value = '2' key = 'eyecolorcode
-------------------------------------------------

如上所示,输出格式被破坏,这似乎是字符串连接或数据处理的问题。

我尝试过的事情

  1. 在打印之前确保正确的字符串连接。
  2. 检查 CSV 文件格式以确保没有额外的分隔符或换行符。
  3. 新增调试信息,用于检查数据处理的每一步。

尽管做出了这些努力,我仍然无法确定这个问题的原因。我将不胜感激任何帮助解决这个问题的帮助。谢谢!

最奇怪的是,这个问题只发生在每个循环的最后一行。我们得到了正确的结果,但是打印的时候却出现了问题。这很奇怪。

arrays printing lua
1个回答
0
投票

这可能是因为您正在读取以 CRLF 作为行终止符的文件,但您忘记从标题行中删除 CR 字符:

local header = file:read():gsub("\r", "")
© www.soinside.com 2019 - 2024. All rights reserved.