读取文件文本并存储在二维数组中

我有一个名为“a.txt”的文件文本:

1 2 3
4 5 6
7 8 9

现在我想将其存储在二维数组中:

array = { {1,2,3}{4,5,6}{7,8,9} } 我尝试过以下方法:

array ={}
file = io.open("a.txt","r")
io.input(file)
i=0
for line in io.lines() do
   array[i]=line
   i=i+1
end

但是它没有成功。 有人建议我怎么做吗?

点赞
用户3197530
用户3197530

你的代码中存在一些错误。你首先打开文件 a.txt,然后将其设置为标准输入。你不需要 open()。但我建议你打开文件并在上面操作,使用文件的 lines() 迭代器:

array = {}
file = io.open("a.txt","r")
i = 0
for line in file:lines() do
   array[i]=line
   i=i+1
end

此外,通过你的方法,你得到的不是你想要的数组 ({ {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }) ,而是包含字符串元素的数组: { "1 2 3", "4 5 6", "7 8 9" }。 要得到后者,你需要解析你读取的字符串。一个简单的方法是使用带有捕获组的 string.match

array ={}
file = io.open("a.txt","r")
for line in file:lines() do
    -- 提取确切的三个整数:
    local t = { string.match(line, "(%d+) (%d+) (%d+)")) }
    table.insert(array, t) -- append row
end

参见 https://www.lua.org/manual/5.3/manual.html#pdf-string.match。对于每行任意数量的整数(或其他数字),你可以使用循环和 string.gmatch()

array ={}
file = io.open("a.txt","r")
for line in file:lines() do
    local t = {}
    for num in string.gmatch(line, "(%d+)") do
        table.insert(t, num)
    end
    table.insert(array, t)
end
2016-05-30 15:51:22