逐行读取文件到数组中
Read file line by line into array
抱歉,我还在学习 lua。你能纠正我吗,为什么文件中的数据不能逐行读取?
这是我在文件 points.txt 中的示例数据:
lexxo:30:1
rey:40:2
lion:40:2
prince:50:3
royal:50:3
所以当我从上面得到的是二维数组(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] -- Get Player Name From Array for checking further
player_checkpnt = player_data[i][3] -- Get Player ID Point From Array for checking further
print(i..". Name: "..player_data[i][1].." Point: ".. player_data[i][2] .. " ID: " .. player_data[i][3]);
end
您每次都用新记录覆盖 player_data
,集合保存在 line_points
中;然而,在打印时,你的循环上升到 #player_data
(这将是 1)并访问 player_data
而不是 line_points
.
你可能想做那样的事情1:
table.insert(player_data, {playername, playerpoint, playeridpoint})
1 t[#t+1]=
习惯用法也可以,只需使用正确的 table 并注意(去掉)代码中的双括号。
player_data 的索引始终为 1,因为您不将项目添加到 ,而是将它们添加到 line_points,即 #line_points 是5,所以改用它。
这是你想要的吗:?
line_points = {}
player_data = {{}} --I think you can delete it at all...
--Because it is rewriting each time.
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}
--I also remover double table here ^^^^^^^^^^^^^^^^^^^
line_points[#line_points + 1] = player_data
end
--Here i checked counts
--print('#pd='..#player_data)
--print('#lp='..#line_points)
--After it i decided to use line_points instead of player_data
for i = 1, #line_points do
player_checkname = line_points[i][1] -- Get Player Name From Array for checking further
player_checkpnt = line_points[i][3] -- Get Player ID Point From Array for checking further
print(i..". Name: "..line_points[i][1].." Point: ".. line_points[i][2] .. " ID: " .. line_points[i][3]);
end
输出:
1. Name: lexxo Point: 30 ID: 1
2. Name: rey Point: 40 ID: 2
3. Name: lion Point: 40 ID: 2
4. Name: prince Point: 50 ID: 3
5. Name: royal Point: 50 ID: 3
更新:
将第一个循环中的 player_data assignemnt 更改为单个 table 后,计数始终为 3。
抱歉,我还在学习 lua。你能纠正我吗,为什么文件中的数据不能逐行读取?
这是我在文件 points.txt 中的示例数据:
lexxo:30:1
rey:40:2
lion:40:2
prince:50:3
royal:50:3
所以当我从上面得到的是二维数组(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] -- Get Player Name From Array for checking further
player_checkpnt = player_data[i][3] -- Get Player ID Point From Array for checking further
print(i..". Name: "..player_data[i][1].." Point: ".. player_data[i][2] .. " ID: " .. player_data[i][3]);
end
您每次都用新记录覆盖 player_data
,集合保存在 line_points
中;然而,在打印时,你的循环上升到 #player_data
(这将是 1)并访问 player_data
而不是 line_points
.
你可能想做那样的事情1:
table.insert(player_data, {playername, playerpoint, playeridpoint})
1 t[#t+1]=
习惯用法也可以,只需使用正确的 table 并注意(去掉)代码中的双括号。
player_data 的索引始终为 1,因为您不将项目添加到 ,而是将它们添加到 line_points,即 #line_points 是5,所以改用它。
这是你想要的吗:?
line_points = {}
player_data = {{}} --I think you can delete it at all...
--Because it is rewriting each time.
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}
--I also remover double table here ^^^^^^^^^^^^^^^^^^^
line_points[#line_points + 1] = player_data
end
--Here i checked counts
--print('#pd='..#player_data)
--print('#lp='..#line_points)
--After it i decided to use line_points instead of player_data
for i = 1, #line_points do
player_checkname = line_points[i][1] -- Get Player Name From Array for checking further
player_checkpnt = line_points[i][3] -- Get Player ID Point From Array for checking further
print(i..". Name: "..line_points[i][1].." Point: ".. line_points[i][2] .. " ID: " .. line_points[i][3]);
end
输出:
1. Name: lexxo Point: 30 ID: 1
2. Name: rey Point: 40 ID: 2
3. Name: lion Point: 40 ID: 2
4. Name: prince Point: 50 ID: 3
5. Name: royal Point: 50 ID: 3
更新:
将第一个循环中的 player_data assignemnt 更改为单个 table 后,计数始终为 3。