如何将文本文件加载到类似于表格的变量中的Lua中?

我需要将文件加载到 Lua 变量中。

假设我有

name address email

每个之间有一个空格。我需要将有 x 行这样的文本文件加载到某种对象中 - 或者至少将一行划分为由空格分隔的字符串数组。

Lua 是否能够完成这样的工作,我应该如何做?我对 Lua 相当新,但我在网上找不到任何相关的信息。

原文链接 https://stackoverflow.com/questions/1891473

点赞
stackoverflow用户15795
stackoverflow用户15795

如果你能够控制输入文件的格式,最好按照这里所述的使用Lua格式存储数据。

如果不能控制,使用io库打开文件,然后使用string库

local f = io.open("foo.txt")
while 1 do
    local l = f:read()
    if not l then break end
    print(l) -- 使用string库来分割字符串
end
2009-12-12 00:34:22
stackoverflow用户117069
stackoverflow用户117069

以下是对uroc答案的补充解释:

local file = io.open("filename.txt")
if file then
    for line in file:lines() do
        local name, address, email = unpack(line:split(" ")) --unpack函数可以将一个表转成多个不同的变量
        --使用这些数据进行相应操作
    end
else
end
--注意需要使用分隔字符串的方法,我推荐在http://lua-users.org/wiki/SplitJoin上使用类似于Python的方法
--本文未提供该方法,因为可能存在版权问题

然而,这种方法无法处理名字中包含空格的情况。

2009-12-12 00:55:34
stackoverflow用户41661
stackoverflow用户41661

您想阅读关于 Lua patterns 的内容,它们是 string library 的一部分。这里有一个示例函数(未经测试):

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)字符组成的三个子字符串。真实的函数会进行一些错误检查,以确保匹配模式。

2009-12-12 01:13:31