| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Перемещение по файлу |
| Автор: bamper 18.6.2008, 18:20 |
| Здравствуйте многоуважаемые. У меня такой вот вопрос по работе с файлами. Я обрабатываю файл следующего содержания: ISA00 0804041802U004030000038200P: filename1.txt 28029 ISA01 097509996 6111492199200804041802 ............................................................................................... ISA00 0804041802U004030000038200P: filename2.txt 28029 ISA01 097509996 6111492199200804041802 ............................................................................................... В файле есть повторяющиеся сегменты. Я вытаскиваю имена файлов (filename1.txt, filename2.txt и т.д.) которые находятся на одинаковом байтовом смещении (по моему Обрабатываемый файл может достигать нескольких сотен мегабайт. |
| Автор: tolkien 18.6.2008, 19:17 |
| Если размеры считываемых сегментов фиксированы seek+read. Если нет, то только последовательно просматривать каждую строку |
| Автор: ginnie 18.6.2008, 19:24 |
| bamper, как вариант, сначала создать новый файл, содержащий только строки с ISA00 и его построчно обработать (поле выбирать путем split строки по пробельным символам). |
| Автор: bamper 18.6.2008, 19:51 | ||
Нет. Сегменты не фиксированы по размеру. |
| Автор: Itsys 18.6.2008, 19:58 |
| А почему бы не воспользоваться регулярным выражением? |
| Автор: bamper 18.6.2008, 20:39 | ||||
Можно с примером пожалуйста. Воспользовавшись подсказкой ginnie я организовал все следующим образом:
Хм... А как еще к этой строке две послеидущие добавить? Там тоже нужная информация оказалась. |
| Автор: amg 19.6.2008, 06:38 | ||
Это легко (см. код ниже). Только не нужно зачитывать сразу весь большой файл в массив, памяти не хватит -- будет плохо. Лучше читать его построчно, можно тут же и обрабатывать найденные строки.
|
| Автор: Bulat 19.6.2008, 11:38 |
| bamper, ИМХО, проще применить на регулярные выражения. Только я не до конца понял, что именно Вам нужно получать из текущей строки |
| Автор: bamper 19.6.2008, 14:34 | ||
из строки я вытягиваю filename.txt. я просто split`ую строку я вытягиваю нужный мне аргумент. |
| Автор: Bulat 19.6.2008, 14:47 | ||
|
| Автор: bamper 19.6.2008, 20:11 |
| Спасибо за помощь!.. |