Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > "Отмотать" позицию при построчном чтении файла


Автор: alt2 4.12.2012, 16:54
Есть ли возможность "отмотать" назад позицию при построчном чтении файла, на некоторое количество строк (не байт)?
Искал-искал. Не нашел.

Автор: arto 4.12.2012, 17:02
запомнить и отмотать

Автор: alt2 4.12.2012, 17:11
Цитата(arto @ 4.12.2012,  17:02)
запомнить и отмотать

Чем отмотать? Перечитать с начала?

Автор: arto 4.12.2012, 17:33
perldoc -f seek

Автор: alt2 4.12.2012, 17:37
Цитата(arto @ 4.12.2012,  17:33)
perldoc -f seek

Seek побайтный.
Предложение помнить ответ tell для всех пройденных строк (сейчас их 10 млн.) заманчивое, но у меня и другие костыльные решения придумались - менее затратные.

Хотелось бы напрямую - перемоткой строк. Если возможно.

Автор: arto 4.12.2012, 17:43
невозможно.

Автор: alt2 4.12.2012, 17:44
Цитата(arto @ 4.12.2012,  17:43)
невозможно.

Ясно. Спасибо.

Автор: noize 5.12.2012, 13:11
прочитать весь файл в массив:
my @array = <FILE>;

после чего можно работать с нужной строкой строкой.

Автор: DurRandir 5.12.2012, 23:46
Ну если вы уже читаете и как-то разбили на строки - то у вас есть их длина. Храните длину последних N прочитанных строк, надо вернуться назад - вычитаете из текущей позиции n слагаемых, удаляете их из этого списка.

Автор: slavenk 9.12.2012, 14:27
Можете использовать модуль https://metacpan.org/module/Tie::File. В данном случае строки файла представляются в виде массива, единственное предостережение - изменение значения массива изменяет строку файла, если не был указан модификатор "только чтение" в конструкторе

Код

# open an existing file in read-only mode
use Fcntl 'O_RDONLY';
tie @array, 'Tie::File', $file, mode => O_RDONLY;

Автор: alt2 9.12.2012, 14:45
Цитата(slavenk @ 9.12.2012,  14:27)
Можете использовать модуль https://metacpan.org/module/Tie::File. В данном случае строки файла представляются в виде массива, единственное предостережение - изменение значения массива изменяет строку файла, если не был указан модификатор "только чтение" в конструкторе

Код

# open an existing file in read-only mode
use Fcntl 'O_RDONLY';
tie @array, 'Tie::File', $file, mode => O_RDONLY;

А вот это интересный ход. Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)