在Lua中将文件转化为数组

3

我在想如何使用lua中的某种函数将一行数据存入数组中。

例如:FileToArray("C:/file.txt")?

我知道可以使用以下代码:

var = io.open("file")
Data = var:read()

但它只返回第一行,没有其他行。

有人知道如何解决这个问题或有其他方法吗?我是lua和文件系统方面的新手。

2个回答

19

你可以将"*a"传递给读取函数,它应该会读取整个文件:

local file = io.open("file-name", "r");
local data = file:read("*a")

如果你想要将每一行都存储到一个数组中,你可以像Jane的解决方案一样使用io:lines() - 它返回一个迭代器函数(每次调用会给你一个新的行)。

 local file = io.open("file-name", "r");
 local arr = {}
 for line in file:lines() do
    table.insert (arr, line);
 end

请注意,仅仅因为 "*all" 能够工作是偶然的。它只查看前两个字符。 - daurnimator
你说得对,我不知道为什么写了“*all”。 - tozka
2
甚至比使用:lines更好的是io.lines("path")。它会在最后一次迭代中关闭文件。 - daurnimator
“rb”在格式中代表什么?我知道“r”代表读取模式,但“rb”呢? - user1465457
我点赞了这个答案,但是我想推荐这个非官方Lua FAQ网站,因为还有其他好东西。请注意,我与该网站没有任何关联。 - Tzunghsing David Wong
显示剩余4条评论

3
local file = io.open("c:\\file.txt")
local tbllines = {}
local i = 0
if file then
    for line in file:lines() do
     i = i + 1
     tbllines[i] = line
    end
    file:close()
else
    error('file not found')
end

请查看http://lua-users.org/wiki/IoLibraryTutorial了解更多有关it技术的信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接