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我又编辑了一次,这基本上是我发布的第一个版本。您以前的模式无法与现在的每一行匹配。是的,该检查是正确的。然而,最好保留你的每一个问题,因为很少有人会阅读你的前一个问题来找出你想要解决的问题。我碰巧回答了你之前的问题,所以我知道背景,但没有人知道。出于同样的原因,我收回了你的问题。