0

好的,我使用这里的方法:如何在 Lua 中仅读取文本文件的最后一行?

问题是有时线可能更大。

问题是我如何从文件末尾找到第一个单词“foo”,然后使用它之后的所有内容?

4

2 回答 2

1

问题是有时线可能更大。

然后,您只需要从末端进一步寻找。

问题是我如何从文件末尾找到第一个单词“foo”,然后使用它之后的所有内容?

抓取足够大的文件块,以确保您有最后一个 foo,.*foo用于跳过所有内容,包括最后一个“foo”(.* 是贪婪的)。

local f = io.open('filename', 'r')
f:seek('end', -1024)
local text = f:read('*a')
local after = string.match(text, ".*foo(.*)")
f:close()
于 2012-05-22T19:58:40.053 回答
0

如果文件不是太大并且您准备好采取简单的方法,这可能会有所帮助:

fh=io.open('myfile.txt','rb')
str=fh:read'*a'
pat='foo'
afterFoo=str:match('.*'..pat..'(.*)$')
fh:close()

如果您需要更复杂但更快(在大文件上运行时)的解决方案,我的猜测是您以块的形式读取文件,反转它们中的每一个,然后反向查找您的模式。不要忘记在边界上寻找你的模式(在一般情况下,块必须至少与你正在寻找的模式的长度重叠)。

有关块读取的更多说明,请参阅我的帖子

于 2012-05-22T19:54:53.030 回答