function read_csv_to_table(filename)
local file = io.open(filename, "r")
if not file then
return nil, "无法打开文件"
end
local data = {}
for line in file:lines() do
local fields = {}
for field in line:gmatch('([^,]+)') do
table.insert(fields, field)
end
table.insert(data, fields)
end
file:close()
return data
end
function get_field_from_table(data, i, j)
if data and i > 0 and j > 0 and i <= #data and j <= #data[i] then
return data[i][j]
else
return nil, "无效的索引"
end
end
local filename = "1000_x01.csv" -- 自己的文件
local i = 2 -- 读取第2行
local j = 3 -- 读取第3个字段
local data, err = read_csv_to_table(filename)
if not data then
print("读取CSV文件时发生错误: " .. err)
else
local field, err = get_field_from_table(data, 1, j)
if field then
print("第" .. i .. "行第" .. j .. "个字段的值是: " .. field)
else
print("获取字段时发生错误: " .. err)
end
end
在这个脚本中,read_csv_to_table函数读取CSV文件,并将其内容存储在一个二维table中,每一行是一个包含字段的table。然后,get_field_from_table函数从这个table中检索特定行和列的字段。
另外要注意一件事,这个脚本假设CSV文件中的字段是由逗号分隔的,并且没有考虑引号或特殊字符。如果你的CSV文件有更复杂的格式(例如,包含引号或换行符的字段),就可能需要使用更复杂的解析器来正确读取文件。
此外,这个脚本也没有处理可能出现的编码问题。如果你的CSV文件使用的是非UTF-8编码,可能需要在读取文件之前将其转换为UTF-8编码,或者相应地调整Lua的文件读取代码。