关于io:在for循环中调用file:lines()时出错

Error when calling file:lines() in for loop

我有以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function getusers(file)
    print (type(file))
    for line in file:lines() do
    user, value = string.match(file,"(UserName=)(.-)\
"
)
    print(value)
    end

    f:close()
    end

 f = assert(io.open('file2.ini',"r"))
 t = f:read("*all")
 getusers(t)

回归:

1
print(type(file))

是字符串类型。 Lua 将错误代码返回给我:

lua: reader.lua:3: attempt to call method 'lines' (a nil value)

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


f 是一个文件处理程序,而 t 是一个包含内容的字符串。您正在尝试调用 io.lines,因此它应该是一个文件处理程序。事实上,你根本不需要 t

1
2
3
4
5
6
7
8
9
10
11
12
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=)(.*),因为现在您匹配的是每一行,而不是整个文件。


我不知道这是否是最聪明的方法,但现在我使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
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' 的值。