2

私は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

しかし、うまくいかないようです。または、データへのアクセス方法がわかりません。

誰でも私の問題の解決策を提案できますか? ありがとう。

4

1 に答える 1

3

*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[<number of waypoints>].xこれらの要素には(または)でアクセスできますy/z

于 2013-08-03T18:15:47.377 に答える