我正在编写一个 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
-------------------------------------------------
如上所示,输出格式被破坏,这似乎是字符串连接或数据处理的问题。
尽管做出了这些努力,我仍然无法确定这个问题的原因。我将不胜感激任何帮助解决这个问题的帮助。谢谢!
最奇怪的是,这个问题只发生在每个循环的最后一行。我们得到了正确的结果,但是打印的时候却出现了问题。这很奇怪。
这可能是因为您正在读取以 CRLF 作为行终止符的文件,但您忘记从标题行中删除 CR 字符:
local header = file:read():gsub("\r", "")