2009-01-30 4 views
1

У меня есть программа, которая генерирует текстовые поля, размер которых может составлять до 20 мегабайт. Иногда мне остается только заботиться о последней строке в файле, есть ли способ прочитать только эту строку, не теряя память, читающую остальную часть файла?Как читать только последнюю строку текстового файла в Lua?

ответ

3

Я мог ошибаться, но, не прибегая к каким-то обманам, кажется, что вы не можете. Однако, если у вас есть приблизительная оценка длины строк, вы можете открыть файл, а затем искать с конца, скажем, 1Kb.

local f = io.open([[c:\test_file.txt]], "r") 
local len = f:seek("end") 

f:seek("set", len - 1024) 
local text = f:read("*a") 

print(string.match(text, "[^%c]*$")) 
f:close() 

Надеюсь, это поможет. Учтите, что шаблон нуждается в некоторой доработке. В настоящее время предполагается, что на строке не отображаются управляющие символы. Если в вашей строке есть вкладки, то они будут захватываться оттуда до конца файла.

+0

Две линии поиска могут быть легко объединены в один: f: искать («конец», -1024) –

+0

Спасибо, я пропустил это в руководстве. – Ignacio