如何在 Lua 中从文件末尾查找单词

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

问题在于有时候行的长度可能更长。

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

点赞
用户513763
用户513763

如果文件不太大并且你准备采用简单的方法,这可能有所帮助:

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

如果你需要一个更复杂但更快(在大文件上运行时间更短)的解决方案,我的猜测是你要以块的形式读入文件,反转每个块,并在反转中寻找你的模式。不要忘记跨越边界查找你的模式(在一般情况下,这些块必须重叠至少与你寻找的模式长度相同)。

关于块读取的更多说明,请参见我的文章这里

2012-05-22 19:54:53
用户501459
用户501459

问题是有时行可能更长。

那么你只需要从结尾继续往前搜索就行了。

问题是如何从文件结尾找到第一个单词“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-22 19:58:40