我正在学习 Lua 来构建飞行模拟器的脚本。
我有一个 CSV 文件,如下所示:
Poti city, Poti,red,-295731.42857144,617222.85714285
Lanchhuti city, Poti,red,-299217.14285715,647851.42857142
Ozurgeti city, Poti,red,-317217.14285715,648422.85714285
Samtredia city, Poti,red,-287502.85714287,672022.85714285
Abasha city, Poti,red,-284245.71428573,661108.57142857
每行包含 5 个字段 (city
, region
, coalition
, coordinate-x
and coordinate-y
在模拟器坐标参考系中)。
我需要将此文件作为 lua 表读取,应如下所示:
citylist = {
[1]
{
["city"] = "Poti city",
["region"] = "Poti",
["coalition"] = "red",
["coordinate-x"] = -295731.42857144,
["coordinate-y"] = 617222.85714285,
},
[2]
{ ....... etcetc
}
我还必须对一些不同的 csv 文件执行此操作,并且我尝试从 luawiki 查找一些 CSV 函数,但老实说我不太了解。
您能否写下一个可以按预期解析 CSV 文件的代码示例?
PS:从来没有' " '
csv 文件中的字符。
编辑+添加
好的,答案 1 中的代码似乎可以工作,但似乎无法构建像上面这样的表。作为一个新手,我会尽力解释。
我尝试解析这段文字:
123,Poty city,Poti,red,-295731.42857144,617222.85714285
124,Lanchhuti city,Poti,red,-299217.14285715,647851.42857142
125,Ozurgeti city,Poti,red,-317217.14285715,648422.85714285
126,Samtredia city,Poti,red,-287502.85714287,672022.85714285
用这个代码:
do
local OLo = io.open(lfs.writedir() .. "Logs/" .. "Objectivelist.txt", "r")
local Objectivelist = {}
for line in io.lines(OLo) do
local objID, objName, objRegion, objCoalition, objCoordx, objCoordy = line:match("%s*(.-),%s*(.-),%s*(.-),%s*(.-),%s*(.-),%s*(.-)")
Objectivelist[#Objectivelist + 1] = { ["objID"] = objID, ["objName"] = objName, ["objRegion"] = objRegion, ["objCoalition"] = objCoalition, ["objCoordx"] = objCoordx, ["objCoordy"] = objCoordy }
end
end
然后尝试使用以下代码重建一些不同的输出以进行调试:
do
local fName = "DGWS-DEBUG-objectivelist.doc"
local f = io.open(lfs.writedir() .. "Logs/" .. fName, "w")
local debugOBJ = ""
for ind, objData in pairs(Objectivelist) do
debugOBJ = debugOBJ.. objData.objID .. "," .. objData.objName .. "," .. objData.objRegion .. "," .. objData.objCoalition .. "," .. objData.objCoordx .. "," .. objData.objCoordy .. "\n"
end
f:write(debugOBJ)
end
好吧,它在“for ind, objData inpairs(Objectivelist) do”行中给出了错误,表示期望一个表并得到零。
我不明白错误在哪里:(,你能帮我吗?。
谢谢 :)
PS:我不知道匹配代码,但我会尝试学习如何在预期代码起作用后立即对值进行更严格的检查:)