![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
Нужно два раза пройти по файлу(сам файл такой поэтому два раза), только один проход будет лежать в цикле другого.
А проблема в том что я начинаю один раз вытаскивать строки из файла, при обработке строки, захожу начинаю еще раз обрабатывать строки, и когда внутрення обработка заканчивается, внешняя обработка строк файла уже продолжается там где закончилась внутренняя, а мне нужно там где остановилась внешняя обработка.
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| ZeeLax |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4388 Регистрация: 20.8.2006 Где: Алма-Ата Репутация: нет Всего: 88 |
Открой его два раза привязывя к разным файловым переменным. А к чему такая необходимость, два раза по файлу проходить?
-------------------- Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none. — Doug Larson |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
файл логов такой, все разбросано, иного способа не нашел как дважды -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Смотри функции tell, seek
А вообще это не правильно, в особенности если файл - лог, я думаю вполне посильно сделать его однопроходным ну или так:
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| ZeeLax |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4388 Регистрация: 20.8.2006 Где: Алма-Ата Репутация: нет Всего: 88 |
Nab, согласен.
Bulat, можешь кусок лога дать? Или он секретный? -------------------- Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none. — Doug Larson |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
ZeeLax, qmail'ский лог файл, там инфа об отправленных письмах в разных строчках, с разными уидами идет и в разброс, еще информация об одном сообщении не закончилась, а уже о другом идет, вот и приходится двойной обход
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Ну так а почему его однопроходным сделать нельзя? Ведь есть какая-то уникальная инфа в каждой строке, позволяющая соотнести ее к какому-то одному сообщению. Вот и коллекционируй их в именованные списки, а когда сообщение обработаешь освобождай память
Приблизительно вот так, я код не проверял, но идея надеюсь будет понятна... Это сообщение отредактировал(а) Nab - 11.9.2006, 14:35 -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
вот именно что такой нет, точнее сказать она дублируется, притом по ней к другого рода строке вешается иной уид, вообщем если конечно показать сам увидишь что такого нет......... Если бы так было то другое дело, или хотя бы инфа об одном сообщении была бы в одной строке -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Но ведь как-то же ты соотносишь между собой строки во внутреннем цикле, вот и разноси их в разные списки. Ну или используй конечный автомат, с сохранением состояния... Короче, не верю что этот алгоритм нельзя сделать однопроходным -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| ZeeLax |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4388 Регистрация: 20.8.2006 Где: Алма-Ата Репутация: нет Всего: 88 |
У меня не qmail, у меня postfix, но, я думаю, там похожая ситуёвина. Поизучал лог - можно сделать в один проход. -------------------- Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none. — Doug Larson |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
ZeeLax, во-первых, я уже неделю изучал и говорю что нет!
Во-вторых, это можно настроить, вообще как любое приложение можно под себя отредактировать(ну почти любое), только наши технари не могут это сделать, а мы на С не пишем, чтоб отредактировать -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
вот вам кусочек логов......... -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Bulat, не надо злиться, не он к Вам с вопросом пришел...
А если Вы не знаете КАК это сделать, то это не значит что это вообще не возможно, скромнее быть нужно. Логи в принципе выдаются последовательно по мере обработки информации, и как правило могут быть также просто обработаны в один проход... Возможно с временными буферами, как я предложил... А вы мой код видно даже не пытались применить, потому как я там ошибок наделал, а никто меня носом не ткнул (исправил уже). А теперь по существу, рсскажите плиз что в этом логе такого страшного, и зачем вам откачиваться назад то? вот код который я набросал и проверил :
Запусти его на своем логе, и посмотришь что мессаги идут в красивом таком порядке Или объясни плиз логику своего приложения, а лучше код в студию..... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| ZeeLax |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4388 Регистрация: 20.8.2006 Где: Алма-Ата Репутация: нет Всего: 88 |
Да да, а этим нам будет намного проще разобраться. -------------------- Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none. — Doug Larson |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
Nab, вы по-моему совсем не читаете что я пишу вне тега code=perl и /code.
А вывело меня из себя лишь то что я сказал, что в один проход сделать очень сложно(и не факт. что будет оптимально), привел даже пару доводов, относительно отсутствия уникальности строки(или как принято называть уид), отсутствие уникального уида по сообщению, и информация об одном сообщении пишется не в одну а в нескольких строчках которые разбросаны по всему файлу. И знаешь я даже почти сделал в один проход, однако не получается. нет конечно можно запихивать в буфер одну за другим 10, 20..100....1000, строк но не думаю что это будет оптимально(хотя в реальности такого не будет), но мне нужно предусмотреть все возможные варианты....... А товарищ ZeeLax, конечно спасибо за внимание, но смысл писать пост, который не имеет прямого отношения к моей проблеме? Добавлено @ 15:18 ZeeLax, мне нужно выдирать данные из этого лога персонально по каждому сообщению типа от кого, кому, объем, local/remote, доставлено или нет. зачем вам код? достаточный кусок лога, если сможете написать акцентирую оптимальный(в смысле быстродействия, минимально используемого ресурса памяти - сервак слишком загружать тоже нельзя, не единственная задача- и т.п., кроме того не замудренный код, чтоб мог разобраться человек который будет после меня сидеть с этим) код обработки лога в один проход, я в подписи добавлю *** - бог. -------------------- менеджер по кодеврайтингу |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |