Читать файл построчно в массив
Извините, я все еще учусь о Луа. не могли бы вы исправить меня, почему данные из файла не читаются построчно?
это мой пример данных в файле points.txt:
lexxo:30:1
rey:40:2
lion:40:2
prince:50:3
royal:50:3
поэтому, когда я получил сверху, это 2d массив (таблица)
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
2 ответа
Аргумент 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 в первом цикле на один стол, его счет всегда будет равен 3.
Вы переопределяете player_data
с новой записью каждый раз, и коллекция хранится в line_points
; однако при печати ваш цикл увеличивается до #player_data
(который будет 1) и доступ player_data
вместо line_points
,
Вы, вероятно, хотели сделать что-то подобное1:
table.insert(player_data, {playername, playerpoint, playeridpoint})
1 t[#t+1]=
идиома тоже подойдет, просто используйте правильную таблицу и запишите (избавьтесь от) двойные скобки в вашем коде.