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

时间:2014-10-03 11:17:11

标签: 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")
 getusers(t)

返回:

print(type(file))

是字符串。 Lua返回错误代码:

  

lua:reader.lua:3:尝试调用方法'lines'(零值)

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

2 个答案:

答案 0 :(得分:1)

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=)(.*),因为现在您要匹配每一行,而不是整个文件。

答案 1 :(得分:0)

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

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