好,我用的方法從這裏:How to Read only the last line of a text file in Lua?如何找到文件的末尾字在Lua
的問題是,有時線可以做大。
問題是如何從文件末尾找到第一個單詞「foo」,然後使用它後面的所有內容?
好,我用的方法從這裏:How to Read only the last line of a text file in Lua?如何找到文件的末尾字在Lua
的問題是,有時線可以做大。
問題是如何從文件末尾找到第一個單詞「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()
如果文件不是太大,你準備採取簡單的出路,這可能幫助:
fh=io.open('myfile.txt','rb')
str=fh:read'*a'
pat='foo'
afterFoo=str:match('.*'..pat..'(.*)$')
fh:close()
如果你需要一個更復雜的,但速度更快(大文件在運行時)解決方案,我的猜測是你'在塊中讀取文件,反轉每個文件,並反向查找你的模式。不要忘記跨越邊界尋找你的圖案(在一般情況下,塊至少要重疊你要尋找的圖案的長度)。
有關塊閱讀的更多解釋,請參閱我的文章here。
也謝謝你,我的文件可能非常大(我正在解析一個日誌)。 – TotallyStuck
鑑於您已經在使用正則表達式,因此不需要反轉任何內容。只需使用'。* PATTERN'跳過所有內容,包括最後一次出現的'PATTERN'。 – Mud
是的,的確,你是對的:)。糾正。 – jpjacobs
非常感謝,這對我們幫助很大。 – TotallyStuck