![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| bamper |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 31.3.2008 Репутация: нет Всего: нет |
Здравствуйте многоуважаемые.
У меня такой вот вопрос по работе с файлами. Я обрабатываю файл следующего содержания: ISA00 0804041802U004030000038200P: filename1.txt 28029 ISA01 097509996 6111492199200804041802 ............................................................................................... ISA00 0804041802U004030000038200P: filename2.txt 28029 ISA01 097509996 6111492199200804041802 ............................................................................................... В файле есть повторяющиеся сегменты. Я вытаскиваю имена файлов (filename1.txt, filename2.txt и т.д.) которые находятся на одинаковом байтовом смещении (по моему Обрабатываемый файл может достигать нескольких сотен мегабайт. |
|||
|
||||
| tolkien |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Если размеры считываемых сегментов фиксированы seek+read. Если нет, то только последовательно просматривать каждую строку
|
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
bamper, как вариант, сначала создать новый файл, содержащий только строки с ISA00 и его построчно обработать (поле выбирать путем split строки по пробельным символам).
Это сообщение отредактировал(а) ginnie - 18.6.2008, 19:25 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| bamper |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 31.3.2008 Репутация: нет Всего: нет |
Нет. Сегменты не фиксированы по размеру. |
|||
|
||||
| Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
А почему бы не воспользоваться регулярным выражением?
|
|||
|
||||
| bamper |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 31.3.2008 Репутация: нет Всего: нет |
Можно с примером пожалуйста. Воспользовавшись подсказкой ginnie я организовал все следующим образом:
Хм... А как еще к этой строке две послеидущие добавить? Там тоже нужная информация оказалась. Это сообщение отредактировал(а) bamper - 18.6.2008, 23:33 |
||||
|
|||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Это легко (см. код ниже). Только не нужно зачитывать сразу весь большой файл в массив, памяти не хватит -- будет плохо. Лучше читать его построчно, можно тут же и обрабатывать найденные строки.
Это сообщение отредактировал(а) amg - 19.6.2008, 06:46 |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
bamper, ИМХО, проще применить на регулярные выражения. Только я не до конца понял, что именно Вам нужно получать из текущей строки
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| bamper |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 31.3.2008 Репутация: нет Всего: нет |
из строки я вытягиваю filename.txt. я просто split`ую строку я вытягиваю нужный мне аргумент. |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| bamper |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 31.3.2008 Репутация: нет Всего: нет |
Спасибо за помощь!..
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |