Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Отмотать" позицию при построчном чтении файла 
:(
    Опции темы
alt2
  Дата 4.12.2012, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 8.11.2011

Репутация: нет
Всего: нет



Есть ли возможность "отмотать" назад позицию при построчном чтении файла, на некоторое количество строк (не байт)?
Искал-искал. Не нашел.
PM MAIL   Вверх
arto
Дата 4.12.2012, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



запомнить и отмотать
PM MAIL ICQ   Вверх
alt2
Дата 4.12.2012, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 8.11.2011

Репутация: нет
Всего: нет



Цитата(arto @ 4.12.2012,  17:02)
запомнить и отмотать

Чем отмотать? Перечитать с начала?
PM MAIL   Вверх
arto
Дата 4.12.2012, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



perldoc -f seek
PM MAIL ICQ   Вверх
alt2
Дата 4.12.2012, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 8.11.2011

Репутация: нет
Всего: нет



Цитата(arto @ 4.12.2012,  17:33)
perldoc -f seek

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

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

Это сообщение отредактировал(а) alt2 - 4.12.2012, 17:39
PM MAIL   Вверх
arto
Дата 4.12.2012, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



невозможно.
PM MAIL ICQ   Вверх
alt2
Дата 4.12.2012, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 8.11.2011

Репутация: нет
Всего: нет



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

Ясно. Спасибо.
PM MAIL   Вверх
noize
Дата 5.12.2012, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


5.18.2
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 10.7.2010
Где: СПб

Репутация: 3
Всего: 3



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

после чего можно работать с нужной строкой строкой.
PM MAIL   Вверх
DurRandir
Дата 5.12.2012, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Ну если вы уже читаете и как-то разбили на строки - то у вас есть их длина. Храните длину последних N прочитанных строк, надо вернуться назад - вычитаете из текущей позиции n слагаемых, удаляете их из этого списка.
PM   Вверх
slavenk
Дата 9.12.2012, 14:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Можете использовать модуль Tie::File. В данном случае строки файла представляются в виде массива, единственное предостережение - изменение значения массива изменяет строку файла, если не был указан модификатор "только чтение" в конструкторе

Код

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

PM MAIL ICQ Skype   Вверх
alt2
Дата 9.12.2012, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 8.11.2011

Репутация: нет
Всего: нет



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

Код

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

А вот это интересный ход. Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.