使用Lua将CSV文件转换为具有定义键的表格。

我正在学习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个字段(城市区域联盟x坐标s式坐标)。

我需要将此文件读取为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文件中从未有过“’“字符

点赞
用户1009479
用户1009479

您可以自己拆分CSV文件。读取文件并使用模式匹配获取每个字段,然后将字段存储到表中。

local citylist = {}
for line in io.lines("citys.csv") do
    local city, region, coalition, coordinate_x, coordinate_y = line:match("%s*(.-),%s*(.-),%s*(.-),%s*(.-),%s*(.-)")
    citylist[#citylist + 1] = { city = city, region = region, coalition = coalition, coordinate_x = coordinate_x, coordinate_y = coordinate_y }
end

在实际代码中,您可以使用更严格的模式。例如,检查坐标值是否真的是数字。

2014-01-17 02:11:24
用户452587
用户452587

如果你只是在原型设计阶段,那么你可以使用我对 Shan Carter 的 Mr. Data Converter 进行的修改版本——我最近添加了 Lua 支持。

http://thdoan.github.io/mr-data-converter/

你可以输入 CSV 或者制表符分隔的数据,并且它将输出两种不同类型的 Lua 表格:字典表格和数组表格(你的例子)。

2015-10-31 06:31:28