我需要将文件加载到Lua的变量中。
让我说我得到了
name address email
每个之间都有空间。我需要文本文件中有许多这样的行被加载到某种对象中 - 或者至少一行应该被切割成字符串数组除以空格。
在Lua这种工作是否可行,我应该怎么做?我对Lua很新,但我在互联网上找不到任何相关内容。
答案 0 :(得分:11)
您想了解Lua patterns,string library是{{3}}的一部分。这是一个示例函数(未测试):
function read_addresses(filename)
local database = { }
for l in io.lines(filename) do
local n, a, e = l:match '(%S+)%s+(%S+)%s+(%S+)'
table.insert(database, { name = n, address = a, email = e })
end
return database
end
此函数只捕获由非空格(%S
)字符组成的三个子字符串。一个真正的函数会进行一些错误检查,以确保模式实际匹配。
答案 1 :(得分:9)
扩展uroc的答案:
local file = io.open("filename.txt")
if file then
for line in file:lines() do
local name, address, email = unpack(line:split(" ")) --unpack turns a table like the one given (if you use the recommended version) into a bunch of separate variables
--do something with that data
end
else
end
--you'll need a split method, i recommend the python-like version at http://lua-users.org/wiki/SplitJoin
--not providing here because of possible license issues
但这并不包括你的名字中有空格的情况。
答案 2 :(得分:3)
如果您可以控制输入文件的格式,最好按照here所述以Lua格式存储数据。
如果没有,请使用io library打开文件,然后使用string library之类的内容:
local f = io.open("foo.txt")
while 1 do
local l = f:read()
if not l then break end
print(l) -- use the string library to split the string
end