如何在Lua中找到文件末尾的单词

时间:2012-05-22 18:27:22

标签: file lua

好的,我从这里使用方法:How to Read only the last line of a text file in Lua?

问题是有时行可能更大。

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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

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

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

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