Lua:如何将大型CSV文件加载到表格中并进行访问。

我是 Lua 的新手,无法加载看起来像这样的 csv 文件:

22.74,22.99,23.47,24.44,26.39,30.27,38.05,53.6,84.7,146.9,271.3,520.1,1017.7,2012.89,4003.28,7984.06,15945.63,31868.75,63715.01,127407.52,254792.53

该行有 21 个由逗号隔开的值,在行中没有空格。我有数百行和数百个文件。 我需要在 Lua 中将这些行加载到一个表中,并能够使用简单的坐标(i,j)访问。我想用一个数字将每个数字称为 cs1,cs2,cs3…cs21,并用一个数字来称呼每一行。

我看了这个函数

    function readwaypoints(filename, numberofwaypoints)
  local file = io.open(filename)
  local waypoints = {}
  for n = 1, numberofwaypoints do
    local x, y, z
    x = file:read('*n')
    y = file:read('*n')
    z = file:read('*n')
    waypoints[#waypoints+1] = {['x'] = x, ['y'] = y, ['z'] = z}
  end
  file:close()
  return waypoints
end

但它似乎不起作用。或者我不知道如何访问数据。

有人能给我提供解决方案吗?谢谢。

点赞
用户1442917
用户1442917

它不起作用的原因是 *n 在输入中期望一个数字并跳过空格,但不跳过逗号。你需要使用 file:read(1) 或类似方法 "吃掉" 逗号。

function readwaypoints(filename, numberofwaypoints)
  local file = io.open(filename)
  local waypoints = {}
  for n = 1, numberofwaypoints do
    local x, y, z
    x = file:read('*n'); file:read(1) --<-- 添加的行
    y = file:read('*n'); file:read(1) --<-- 添加的行
    z = file:read('*n'); file:read(1) --<-- 添加的行
    waypoints[#waypoints+1] = {['x'] = x, ['y'] = y, ['z'] = z}
  end
  file:close()
  return waypoints
end

local waypoints = readwaypoints("waypoints.txt", 20)
print(waypoints[2].x == 24.44, waypoints[1].z == 23.47)

这对我来说打印出 true true。您可以使用 waypoints[<waypoints 数量>].x(或 y/z)访问这些元素。

2013-08-03 18:15:47