Ошибка при вызове файла: 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.