我一直在寻找这个问题的答案,每个人的答案总是逐行做,但问题是我的文件都只是一行字符,并试图io.open("file.txt", "rb"):read("*a")导致内存错误。我不知道如何一次加载一部分,因为就像我说的,它都是一行。
您可以使用io.read(size)
读取指定大小的缓冲区(正如已经在注释中讨论的那样)。参见Lua编程中I/O部分末尾的示例。
由于您正在读取的块中进行搜索,因此您正在搜索的字符串可能会在不同的块之间分割,因此您需要考虑到这一点。另一个来自PiL的关于读取大文件的例子可能会让您感兴趣。
你可以使用table作为buffer:
function readFile(file)
local t = {}
for line in io.lines(file) do
t[#t + 1] = line .. "n"
end
local s = table.concat(t)
return s
end