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

我有以下代码:

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: attempt to call method 'lines' (a nil value)

我不知道如何解决这个问题。如果我只使用for和end之间的这些行(即for循环中的行),它就能正常运行。

点赞
用户1009479
用户1009479

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

    file:close()
end

f = assert(io.open('t.txt', "r"))
getusers(f)

我还修改了模式为 (UserName=)(.*),因为现在你匹配的是每一行,而不是整个文件。

2014-10-03 11:23:00
用户3714446
用户3714446

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

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'的值。

2014-10-03 12:01:24