逐行读取文件到数组中

抱歉,我还在学习lua。你能告诉我,为什么文件中的数据不能逐行读取?

这是我的示例数据在文件 points.txt 中:

lexxo:30:1
rey:40:2
lion:40:2
prince:50:3
royal:50:3

因此,当我从上面获取信息时,得到的是2D数组(table)

player = {{(name),(points),(which var point earned on index)},
          {(...),(...),(...)}};

那么问题就是,当我尝试循环打印文件中的所有数据时,它只打印最后一行。所以我想打印所有数据

line_points =  {}
player_data = {{}}

local rfile = io.open("points.txt", "r")
for line in rfile:lines() do
    playername, playerpoint, playeridpoint = line:match("^(.-):(%d+):(%d+)$")
    player_data = {{playername, playerpoint, playeridpoint}}
    line_points[#line_points + 1] = player_data
end

for i = 1, #player_data do
    player_checkname = player_data[i][1] -- 从数组中获取玩家姓名以进行进一步检查
    player_checkpnt = player_data[i][3] -- 从数组中获取玩家ID点以进行进一步检查
    print(i..". Name: "..player_data[i][1].." Point: ".. player_data[i][2] .. " ID: " .. player_data[i][3]);
end
点赞
用户752976
用户752976

你每次都在覆盖player_data的新记录,同时集合被保存在line_points中;然而,在输出时,你的循环迭代到#player_data(这将是1),并访问player_data而不是line_points

你可能想做这样的事情1:

table.insert(player_data, {playername,playerpoint,playeridpoint})

1使用t [#t + 1] = 式也可以工作,只需使用正确的表格和注释(去掉)您的代码中的双括号。

2016-11-07 08:36:52
用户5420570
用户5420570
`player_data` 永远有索引为1,因为您不是将物品添加到 `player_data` 上,而是将它们添加到 `line_points` 上,它的 `#line_points` 为5,因此请改用它。

这符合您的要求吗?

line_points = {} player_data = {{}} --我认为你可以把它全部删除... --因为它每次都会被重新写入。

local rfile = io.open("points.txt", "r") for line in rfile:lines() do playername, playerpoint, playeridpoint = line:match("^(.-):(%d+):(%d+)$") player_data = {playername, playerpoint, playeridpoint} --我也删除了上面的双重表格 ^^^^^^^^^^^^^^^^^^^ line_points[#line_points + 1] = player_data end --在这里我检查了计数 --print('#pd='..#player_data) --print('#lp='..#line_points) --之后我决定改用 line_points 而不是 player_data for i = 1, #line_points do player_checkname = line_points[i][1] -- 从数组中获取玩家名称以进行进一步检查 player_checkpnt = line_points[i][3] -- 从数组中获取玩家ID点以进行进一步检查 print(i..". 名称:"..line_points[i][1].." 点数:".. line_points[i][2] .. " ID:" .. line_points[i][3]); end


输出:
  1. 名称:lexxo 点数:30 ID:1
  2. 名称:rey 点数:40 ID:2
  3. 名称:lion 点数:40 ID:2
  4. 名称:prince 点数:50 ID:3
  5. 名称:royal 点数:50 ID:3

```

更新

将第一个循环中的 player_data 赋值更改为单个表格后,它的计数始终为3。

2016-11-07 08:53:24