![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
study |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 20.9.2004 Репутация: нет Всего: нет |
Привет всем!
Народ у меня такой вопрос. Мне надо проанализировать файл, при обнаружении определенный строки (например start-111), начинать подсчет других определенных строк, а при обнаружении строки stop-111, завершать сбор и выводить накопленную статистику в файл. Возможна ситуация, когда до завершения сбора придет другой start-222... Можно ли сохранять в хэшь или в массив (многомерный) эти данные, а по приходу stop удалять этот параметр из хэша, т.е. (a, @b), где a - парамертstart, а массив b - строки? |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 2 Всего: 83 |
study, что-то такое тебе надо?
|
|||
|
||||
study |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 20.9.2004 Репутация: нет Всего: нет |
спасибо GoodBoy, сейчас попробую
|
|||
|
||||
study |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 20.9.2004 Репутация: нет Всего: нет |
Привет ещё раз!
Народ, а нельзя ли это как-нибудь оптимизировать, может не через хеши делать, а то слишком долго считает? ![]() |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 2 Всего: 83 |
оптимизировать можно вот так:
|
|||
|
||||
sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
GoodBoy, зачем ты читаешь в массив, а потом его перебераешь, это лишнее, много памяти тратится, особенно если файл большой.
Плюс отказываемся от старого стиля работы с файлами, а именно - от глобов и отказаться от лишних переменных - например, $line заменить на $_. Поэтому:
Плюс можно переписать через ссылки, чтобы все было оптимально. А на счет алгоритма - я не смотрел ![]() ![]() Это сообщение отредактировал(а) sharq - 4.5.2006, 13:14 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
||||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 2 Всего: 83 |
sharq, уважаемый, ты взял скелет из моего сообщения (второго от начала этой темы). Для чего это было сделано, можешь мне пояснить?
|
|||
|
||||
sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
GoodBoy,
я оптимизировал приведенный тобой код, т.к. А логику работы я не оптимизировал, т.к. не разбирал и твой вариант вполне рабочий! Или тебе не понравилась моя оптимизация? ![]() ![]() Это сообщение отредактировал(а) sharq - 4.5.2006, 12:55 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
Kannabismus |
|
|||
Тим Тоуди Профиль Группа: Участник Сообщений: 45 Регистрация: 20.11.2005 Репутация: 1 Всего: 2 |
Аргументируй, пожалуйста |
|||
|
||||
sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
Kannabismus, в книле Ларри Уолла есть маленькая пометка об этом.
А вот в книге Intermediate Perl (вышла совсем недавно - март 2006, авторы: brian d foy, Tom Phoenix, Randal L. Schwartz) отлично написано. Ну а если нет под рукой книг, то вот: в версии perl 5.6 появилась возможность в качестве файлового дескриптора использовать обыкновенный скалярную переменную, незаводя для этого глоб, который может быть уже занят. Переменная определяется в open и что самое полезное - можно не закрывать файл (если нет необходимости!), то сборщик мусора perl сам все сделает. Так, например, в данном примере, close $fh - излишне! Всем советую полистать приведенные выше книги, т.к. они действительно полезны, но не заменяют perldoc, а дополняют. Плюс книга Perl Best Practics Damian Conway. ![]() -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 2 Всего: 83 |
Ты "оптимизировал" мой код вернув его к первоначальному варианту!!! |
|||
|
||||
sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
GoodBoy, т.к. первоначальный вариант, твой лучше, чем второй.
Но мой вариант все-таки отличается от первого твоего + я посоветовал использовать ссылки (например, вместо %). ![]() -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
GoodBoy |
|
||||||||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 2 Всего: 83 |
Что ты этим хочешь сказать? Что вместо
использовать
?? и, типа,
будет чем-то отличаться от
?? Или что? |
||||||||
|
|||||||||
Kannabismus |
|
|||
Тим Тоуди Профиль Группа: Участник Сообщений: 45 Регистрация: 20.11.2005 Репутация: 1 Всего: 2 |
Да, в этом случае можно не закрывать файл, но это плохой стиль программирования. Все открытые хэндлы надо закрывать явно. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |