4
A
回答
2
此解決方案基於@PaulKulchenko的想法。
是的,這是很麻煩:-)
在io
庫定義功能io.linesbackward(filename)
:
function io.linesbackward(filename)
local file = assert(io.open(filename))
local chunk_size = 4*1024
local iterator = function() return "" end
local tail = ""
local chunk_index = math.ceil(file:seek"end"/chunk_size)
return
function()
while true do
local lineEOL, line = iterator()
if lineEOL ~= "" then
return line:reverse()
end
repeat
chunk_index = chunk_index - 1
if chunk_index < 0 then
file:close()
iterator = function()
error('No more lines in file "'..filename..'"', 3)
end
return
end
file:seek("set", chunk_index * chunk_size)
local chunk = file:read(chunk_size)
local pattern = "^(.-"..(chunk_index > 0 and "\n" or "")..")(.*)"
local new_tail, lines = chunk:match(pattern)
iterator = lines and (lines..tail):reverse():gmatch"(\n?\r?([^\n]*))"
tail = new_tail or chunk..tail
until iterator
end
end
end
用法:
1
不使用標準庫。但是,您可以始終通過線條從頭到尾閱讀它,將其存儲在表格中,然後從最後一行「使用」到第一行。
4
這是可能的,但麻煩。 Lua API提供了函數來設置和獲取讀/寫操作適用的文件中的位置。因此,您可以使用「seek」從最後一小塊讀取文件(例如,尋找filesize-1024
位置,讀取1024
字節,查找所有行尾,打印完整行並存儲剩下的),並繼續這樣做,回到文件的開頭。主要優點是你不應該花費比你正在閱讀的緩衝區多得多的內存(就像你從一開始就閱讀,但是想以相反的順序打印,你需要把整個文件放在內存中),但可能會很慢。
相關問題
- 1. 是否可以讀取鎖定文件?
- 2. 是否可以讀取.exe文件?
- 3. 是否可以使用Perl讀取pdf文件中的文本?
- 4. 使用xdocreport,是否可以從docx文件讀取圖形?
- 5. 是否可以使用Chainsaw讀取日誌文件?
- 6. 是否可以使用Java來讀取位圖文件頭?
- 7. 是否可以使用JAVA從文件中讀取/寫入位?
- 8. 是否可以使用Ruby讀取文件的修改日期?
- 9. 是否可以使用FileReader從文件讀取?
- 10. 是否可以使用Actionscript只讀取文件的第一行?
- 11. 是否可以使用PHPWord讀取MSWORD?
- 12. 用c讀取Lua文件#
- 13. Lua讀取只讀文件
- 14. 使用lua讀取文件元數據
- 15. 使用lua讀取pcap文件
- 16. 使用LUA讀取和解析文件
- 17. 是否可以將PDF文件作爲txt文件讀取?
- 18. 是否可以使用python suds從文件系統中讀取wsdl文件?
- 19. 是否可以使用python shell讀取Python文件的文件字符串?
- 20. 是否可以使用Javascript從網絡文件系統讀取文件?
- 21. 是否可以使用JavaScript從txt文件讀取/寫入文件?
- 22. Groovy向後讀取文件
- 23. SAS - 向後讀取文件?
- 24. 檢查文件是否可以用Python讀取:try或if/else?
- 25. 的Lua:讀取文件
- 26. 是否可以同時讀寫文件?
- 27. 是否可以使用SRdd讀取1 GB以上的NetCDF文件?
- 28. 是否可以使用PHP讀取郵件?
- 29. 是否可以讀取文本文件並進行檢查?
- 30. 是否可以使用Labview編寫/讀取文本文件的元數據?
完全向後,讓你獲得 'sdrawkcab'?或者只是最後一行顯示? –
是否需要O(n)時間複雜度? –
@MarcB最後一行首先顯示 – fishy