【问题标题】:Lua: how to load a large CSV file into a table and acess itLua:如何将大型 CSV 文件加载到表中并访问它
【发布时间】:2013-08-04 19:42:46
【问题描述】:

我是 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

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

谁能建议我解决我的问题?谢谢。

【问题讨论】:

    标签: file csv lua load


    【解决方案1】:

    它不起作用,因为*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) --<-- added
        y = file:read('*n'); file:read(1) --<-- added
        z = file:read('*n'); file:read(1) --<-- added
        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[&lt;number of waypoints&gt;].x(或y/z)访问这些元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-31
      • 2019-02-19
      • 1970-01-01
      • 2017-11-02
      • 2023-03-30
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      相关资源
      最近更新 更多