Ошибка при вызове файла: lines() in for loop

У меня есть следующий код:

function getusers(file) print (type(file)) for line in file:lines() do user, value = string.match(file,"(UserName=)(.-)\n") print(value) end f:close() end f = assert(io.open('file2.ini', "r")) t = f:read("*all") getusers(t)

Возвращение:

print(type(file))

это строка типа. Lua возвращает мне код ошибки:

lua: reader.lua: 3: попытка вызова метода 'lines' (значение nil)

Я не знаю, как решить эту проблему. Если я просто использую линии между концом и концом (строки в цикле for), он отлично работает.

2 ответа

f - обработчик файла, а t - строка, содержащая контент. Вы пытаетесь вызвать io.lines, поэтому он должен быть обработчиком файлов. На самом деле, вам не нужно t на всех.

function getusers(file) print(type(file)) for line in file:lines() do user, value = string.match(line,"(UserName=)(.*)") print(value) end f:close()
end
f = assert(io.open('t.txt', "r"))
getusers(f)

Я также изменил шаблон на (UserName=)(.*) Потому что теперь вы соответствуете каждой строке, а не всему файлу.


Я не знаю, является ли это самым умным способом, но теперь я использую:

function getusers(file)
for line in file:lines() do user, value = string.match(line,"(UserName=)(.*)") if value ~= nil then print(value) end
end
f:close()
end
f = assert(io.open('file2.ini', "r"))
getusers(f)

Как вы можете видеть, перед его печатью проверяю значение "значение".

licensed under cc by-sa 3.0 with attribution.