![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| Klif |
|
|||
|
Unregistered |
Помогите плз, у меня затык!
Ситуация такая- есть текстовый файл со статистикой. Но в начале файла есть ненужная инфа о времени и т.д. - 4 строчки. Как мне их удалить? или может как обойти эти строчки ? вот мой cкрипт: while (<File>){ tr/ / /s; ($stat1,$stat2,$stat3,stat4) = split(/ /,$_); $result=$result+$stat3; } print $result; |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Способов как обычно несколько.
1. Воспользуйся следующей конструкцией next if /shablon/; Например если в каждой из этих четырёх строк есть время в следующем формате 15:34:20, то шаблон будет примерно таким: next if /\d{1,2}:\d{2}:\d{2}/; 2. Можно также создать переменную, счётчик: Например:
Удачи ;) Это сообщение отредактировал(а) korob2001 - 2.3.2004, 18:44 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: нет Всего: 83 |
а можно и вот так:
|
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
Спасибо большое!
Все работает! Спасли мою грешую голову |
|||
|
||||
| ElectricalStorm |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 1 Всего: 9 |
не клева так делать лучше как korob2001 написал быстрее будет
преобразуется
-------------------- Нужно знать инструмент, которым пользуешься |
||||||
|
|||||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Как написал ElectricalStorm.
Попробуй заменить строку: $result=$result+$stat3; такой строкой $result += $stat3; Второй вариант делает те же действия, только быстрее. Почему? Потому что, значение переменной $result вычисляется только 1 раз, а в твоем варианте 2 раза. Но в принципе твой вариант тоже прекрасно работает. Как тебе удобней так и пиши, я только посоветовал. ;) Удачи. Это сообщение отредактировал(а) korob2001 - 3.3.2004, 22:56 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Klif |
|
|||
|
Unregistered |
To korob2001
Принял к сведенью. Спасибо за совет.Я просто не думал над оптимизацией когда писал. Я просто не так давно начал кодить... теперь буду повнимательнее над кодом... |
|||
|
||||
| Гость_case |
|
|||
|
Unregistered |
оптимально так
1. cменить признак конца строки 2. считать весь файл в одну переменную 3. заменить =~ /(.+\n){4}//gi 4. записать переменную в файл |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
При условии, что файл не будет слишком большим. Это сообщение отредактировал(а) korob2001 - 4.3.2004, 19:47 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Klif |
|
|||
|
Unregistered |
Я поначалу так и сделал ... но так как файлы у меня могут быть мегабайт по 20... и обращений по 5-10 одновременно ... и все это с перспективой роста !
Вобщем боюсь нету у меня денег на такой сервер GoodBoy дал действительно более действенный вариант ! У меня скрипт стал раза в 3 меньше |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 1 Всего: 9 |
зато в 3 раза тормознее
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Опртимизировать код, это не значит уменьшить кол-во строк. При оптимизации в первую очередь необходимо учитывать расход ресурсов, а только потом уменьшение размера кода. Такой вариант:
подходит только в том случае, если файл будет не слишком большим. Дело в том, что в этом случае сразу содержимое всего файла присваивается массиву @all_file, в котором каждый элемент будет содержать по одной строке. Другими словами, мы записали весь файл в оперативную память. Прошу обратить внимание на то, что оперативная память, конечна, как и всё остальное в этой жизни. ;) А что касается такого варианта:
то, у нас получается такая вот бодяга: 1. Мы открываем файл. 2. Читаем файл построчно, при этом каждая строка присваивается переменной $_. Если такая переменная не устраивает, то можно воспользоваться конструкцией while( my $line = <FILE> ) { блок кода }; 3. Закрываем файл. Можно заметить что во втором варианте мы никогда не загоним в тупик оперативную память, каким большим не был бы наш файл. Удачи. Это сообщение отредактировал(а) korob2001 - 5.3.2004, 18:46 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: нет Всего: 83 |
korob2001 Согласен. При написании своего варианта я и имел в виде небольшие файла, ибо Klif не сказал изначально о 20 Мб с перспективой роста... :-))))))) Для небольших же файлов это вполне оправдано!
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Согласен. Тем более оперировать массивом гораздо проще, чем файлом. Но при этом, для себя сразу нужно решить, что файл не будет большим. Это сообщение отредактировал(а) korob2001 - 5.3.2004, 19:08 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |