我一直在寻找这个问题的答案,但每个人的答案都是逐行操作,然而我的文件只有一行字符,尝试使用io.open("file.txt", "rb"):read("*a")会导致内存错误。我想不出如何分部分加载它,因为它只是一个巨大的行。
你可以使用io.read(size)来读取指定大小的缓冲区(正如评论中已经讨论过的那样)。请参见《Lua编程》中I/O部分末尾的示例。由于你在读取块时进行搜索,所以你要考虑到你正在搜索的字符串可能分布在不同的块之间。《Lua编程》中的另一个例子,谈到了如何读取大文件,可能会有所帮助。
你可以使用表格作为缓冲区: 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
:read(4096)
或类似的方式读取固定大小的块,怎么样? - Amadan:seek(“set”,start)
配合使用,您可以对文件执行与字符串上的.sub
相同的操作。 - Amadan