For loop 在for循环中调用file:lines()时出错

For loop 在for循环中调用file:lines()时出错,for-loop,io,lua,For Loop,Io,Lua,我有以下代码: 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"

我有以下代码:

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:尝试调用方法“line”(一个nil值)


我不知道如何解决这个问题。如果我只使用for和end之间的行(for循环中的行),效果非常好。

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)

如您所见,我在打印“value”之前检查了它的值。

对于我给出的“输入文件”中的每一行,代码只返回“nil”。似乎用户名的筛选现在不再起作用了。@user3714446查看编辑。要么传入
t
并处理整个内容,要么传入
f
并使用
io.lines
处理每一行。你的电话。我在第一篇文章中编辑了代码。它不再工作了。我只需要获取“UserName=”后面的值。@user3714446我又编辑了一次,这基本上是我发布的第一个版本。您以前的模式无法与现在的每一行匹配。是的,该检查是正确的。然而,最好保留你的每一个问题,因为很少有人会阅读你的前一个问题来找出你想要解决的问题。我碰巧回答了你之前的问题,所以我知道背景,但没有人知道。出于同样的原因,我收回了你的问题。