![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Всем еще раз большой привет
die "Usage: $0 log.txt\n" unless @ARGV; while (<>) { m/^N/ || next; m/A97101(\d+)\s*$/ || next; $hash{$1}++; } foreach (sort {$a<=>$b} keys %hash) { print "По телефону $_звонили $hash {$_} раз\n; } Я тут хотел еще спросить $0 здесь участвует как переменная служащяядля адаптации к операционной системе? Как правильно понимать строчку foreach (sort {$a<=>$b} keys %hash) точнее кусок с условием сортировки {$a<=>$b}. А в вайле как я понял нужно задать условие чтото вроде "время <число" Листая книги я просто не встретил примеров с вайлом где былобы <> такое вот |
|||
|
||||
| krypt3r |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Ниасилил. $0 - это аналог argv[0] из C (имя запущенного скрипта). А этот скрипт вообще работает? Я не гуру перла, но должно быть что-то типа
sort {$a<=>$b} keys %hash - сортирует ключи хэша %hash по возрастанию. Тогда внутри foreach переменная $_ будет содержать ключ хэша в данной итерации цикла. Если не ошибаюсь, while (<>) - краткая запись while (<STDIN>) - скрипт будет ожидать ввода с клавы Это сообщение отредактировал(а) krypt3r - 6.10.2009, 10:04 |
||||
|
|||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Парни а вот я такую попробывал написать как в книге писали
вот код : #!/usr/bin/perl use strict; #use varnings; print"reed file st:\n"; open (RO,"ro.txt") or die "Canot open file st"; while (my $line=<RO>){ print "file: $line"; } Там все тотже мой лог... Пытаюсь прочитать все мультистрокой...да хоть как нибудь... Но выдает сообщение О том что не может открыть файл который прописан и выбрасывает по кенот опен файл. Хотя лог положил он должен видеть какжется так как он на томже диске что и перл.? |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Я опять если можно со своим вопросом...Почему у меня не запускается скрипт не один не другой в обоих случаях выдает что не иожет открыть требуемый файл...странно...Вродебы скрипто то небольшой и в дескрипторе вроде не ошибся.Может быть есть какие особые правила размещения рабочего файла?и тд...
|
|||
|
||||
| krypt3r |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Я использую для чтения/обработки небольших файлов такой код
Большие файлы лучше обрабатывать циклом
Для чтения файлов надо использовать символ < перед именем открываемого файла. В случае неудачи команды open сработает аварийный выход с выводом ошибки (переменная $!) Ваш пример более грамотно надо записать так
Это сообщение отредактировал(а) krypt3r - 6.10.2009, 11:24 |
||||||
|
|||||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Запускается он очень просто. Предположим, файл скрипта называется script.pl, а лог-файл -- log.txt. Тогда командная строка будет такой:
perl script.pl log.txt Все три компоненты -- с полными путями, если необходимо. |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Благодарю за подробное обьяснение парни!
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
да вот чтото опять выдает что нет такого файла в директории...
Запускаю через командную строку perl script.pl log.txt нехочет... |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
||||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Вот пробую запустить этот код!
Хочу прочитать содержимое файла тхт строкой. Код: #!/usr/bin/perl use strict; use warnings; #use diagnostics; print "Reading file\n"; open my $RO, '<', "ro.txt" or die "Cannot open file: $!\n"; while (my $line = <$RO>) { # chomp $line; print "file: $line"; } close $RO; Перл лежить на C:\Perl\bin Логфайл лежит C:\ro.txt Команда вызова из командной строки perl script.pl ro.txt Шас с полными путями заряжу... Вобщето немного както странновато получается...Открывая командную строку у меня ничего не запускается...А вот пользуясь редактором DzSoft Perl Editor для перл а точнее встроенной в него опцией выхода в командную строку с автоматическим запуском скрипта ...получается только скрипты с оператором STDIN запускать и вводить значения с экрана. Для проверки работоспособности софта попробывал это сделать. Это сообщение отредактировал(а) Uзверь - 6.10.2009, 12:23 |
|||
|
||||
| krypt3r |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Команда perl script.pl ro.txt сработает, если все 3 файла лежат в текущем каталоге. Запускайте так
Маленький совет - поместите путь к файлу perl.exe в переменную окружения PATH |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
мда...знатьбы ещё как она выглядит и с чем её едят...
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Если мне память не изменяет, Active Perl при установке предлагает добавить perl.exe в переменную окружения PATH, и если от этого специально не отказаться, то добавит (а может, и без спросу добавляет).
Uзверь, попробуй действовать так: 1. Создай какую-нибудь папку, скажем, tmp на диске C: 2. Скопируй в эту папку файл скрипта и файл лога 3. Запусти cmd. Разные способы, например: - зайти Total Commander'ом в или far'ом эту папку и в его командной строке набрать cmd - вызвать cmd через Alt F2 в нем перейти в нужное место, исполнив C: и cd tmp 4. в cmd набрать perl script.pl ro.txt (в cmd стрелка вверх вызывает предыдущую команду, так что много раз ее набирать не придется). ЗЫ Заранее извиняюсь, если говорю тривиальные вещи. |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Еслибы тривиальные...Ато ведь все новое и неизведанное...
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |