Forum Webscript.Ru
Программирование => Perl => Тема начата: Е. Перлов от 28 Января 2003, 18:47:14
-
Подскажите, пожалуйста, как читать файл построчно начиная с конца, т.е. чтобы сначала читалась последняя строчка, потом предпоследня...?
-
В массив потом perldoc -f reverse
-
Чтение в массив - это как раз то, чего я хотел бы избежать, т.к. длина файла ничем не ограничена. Thank you anyway.
-
Tak seek-om читай.
По кусочкам.
perldoc -f seek
-
Смысле по одному байту? Ты не мог бы показать хотя бы схематический алгоритм, как это сделать?
-
Более подробно опиши задачу (формат файла, размер, что с ним надо делать).
-
Схематический алгоритм укладывается в одной строке :)
Сколько поставишь-столько и будет.
Почитай еще perldoc -f sysread
sysread FILEHANDLE,SCALAR,LENGTH
Attempts to read LENGTH characters of data into variable SCALAR
from the specified FILEHANDLE, using the system call read(2).
It bypasses buffered IO, so mixing this with other kinds of
reads, "print", "write", "seek", "tell", or "eof" can cause
confusion because stdio usually buffers data. Returns the num‐
ber of characters actually read, 0 at end of file, or undef if
there was an error. SCALAR will be grown or shrunk so that the
last byte actually read is the last byte of the scalar after
the read.
-
Схематический алгоритм:
1) читаешь кусок файла с конца (допустим, последние 100Кб)
2) разбиваешь с помощью split /\\r?\\n/ на строки
3) первую строку не трогаешь (вдруг это окончание большей строки?), остальному массиву делаешь reverse (или просто читаешь с конца с помощью отрицательных индексов).
4) читаешь следующие 100 Кб с конца + в конец прикрепляешь первую строку
5) и т.д. с пункта 2.
Само собой, нужна грамотная проверка на окончание цикла :)
Кажется, так.