Модераторы: korob2001, ginnie

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Некоторые операторы Perl, Неработает оператор 
:(
    Опции темы
Uзверь
  Дата 28.9.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



 smile Приветствую вас! Я новичок в программировании, пытаюсь осваивать перл актив.При написании минипрограмок вроде "калькулятор\n";) Не работает оператор ввода с клавиатуры...Причом алгоритм правильный...убирая оператор STDIN и заменяя его операцией присваивания перременной числа, действие выполняется.Также я морочился с чтением из и в файл вобщем пробывал эксперементировать с файлами...Задача была произвести запись а тхт файл какой либо строчки или считать  из лога нужную строку по заданому условию.Ничего не получалось...Неработает дескриптор наверное...Вот еще можете посоветовать мне какой интерпретатор скачать для новичка попроще...и какой к нему дистрибутив и сервер ? Кто что подскажет посоветует? Заранее благодарен! smile 

PM MAIL   Вверх
amg
Дата 28.9.2009, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Uзверь, Ваши вопросы слишком не конкретны, и ответить на них можно только столь же не конкретно, например:
Цитата(Uзверь @  28.9.2009,  08:59 Найти цитируемый пост)
Не работает оператор ввода с клавиатуры...
Работает... 
И т.д. Приведите свой код, тогда будет понятно, что не так.

Цитата(Uзверь @  28.9.2009,  08:59 Найти цитируемый пост)
мне какой интерпретатор скачать для новичка попроще...
Если для Windows, то Active Perl

PM MAIL   Вверх
Uзверь
Дата 28.9.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Вот например такой код примера вот.

#!/usr/bin/perl
       print "V1:\n";
 $number1=<STDIN>;
print "V2:\n";
 $number2=<STDIN>;
  print "V3:\n";
     $number3=<STDIN>;
print "V4:\n";
 $number4=<STDIN>;
    $sum = ($number1 + $number2) *$number3+$number4;
       print " $sum :\n";


Всели так? В чем мог ошибиться?Не работает стандартный ввод...
 


Это сообщение отредактировал(а) Uзверь - 28.9.2009, 09:50
PM MAIL   Вверх
DEER
Дата 28.9.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: 1
Всего: 13



Код

C:\Oleg\>perl 2.pl
V1:
2
V2:
3
V3:
4
V4:
5
 25 :

а у вас что пишет при запуске?


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
Uзверь
  Дата 28.9.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



После запуска выдает только V1: 
А в поле подсказок и ошибок пустота...
Пишет что стоит после принта.
А ввод с экрана не выполняется.
STDIN почемуто неработает...

Это сообщение отредактировал(а) Uзверь - 28.9.2009, 10:55
PM MAIL   Вверх
amg
Дата 28.9.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  28.9.2009,  09:49 Найти цитируемый пост)
Всели так? В чем мог ошибиться?Не работает стандартный ввод...
Да все нормально. Должно работать, и, как продемонстрировал DEER, работает. Только, если запускать скрипт, тыча мышкой в его иконку, то можно не успеть заметить результат (запускать нужно из консоли).

Upd. А, так Вы запускаете скрипт из-под какой-то IDE? Попробуйте из консоли.

Это сообщение отредактировал(а) amg - 28.9.2009, 11:00
PM MAIL   Вверх
Uзверь
Дата 28.9.2009, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Я из интерпретатора запускать пробую Ф9
Но вот к сожалению неполучается...Может быть что интерепретатор тупит?
Вроде он должен подождать пока я введу значения... 
PM MAIL   Вверх
DEER
Дата 28.9.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: 1
Всего: 13



запускай из командной строки и будет тебе счастье smile


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
Uзверь
Дата 28.9.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Благодарю щас буду пробывать! smile 
PM MAIL   Вверх
Uзверь
Дата 29.9.2009, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Да ну...у меня машина какая-то бесовская... Из командной строки не запускает...максимум открывает этот файлик в  интерпритаторе smile    Как будто половина работает а оловина нет... 

Это сообщение отредактировал(а) Uзверь - 29.9.2009, 10:35
PM MAIL   Вверх
Bulat
Дата 29.9.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(Uзверь @  29.9.2009,  10:20 Найти цитируемый пост)
Да ну...у меня машина какая-то бесовская... Из командной строки не запускает...максимум открывает этот файлик в  интерпритаторе smile    Как будто половина работает а оловина нет... 


для начала мона попробовать самую стандартную команду для запуска

C:\Path_to_perl\perl.exe your_script_name.pl smile А уж в зависимости от того отработает или нет делать выводы что и где не правильно, вплоть до запуска smile



--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Uзверь
  Дата 30.9.2009, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Всем доброго утра! Вопрос по установке перла и апача. Я извиняюсь но не моглибы мне сказать должен ли я при установке указывать другие пути, не те которые задаются по умолчанию инсталером ?И при установке перла тоже самое как и с апачем...Если стоит следовать инструкциям по установке этого дела хотелось бы получить ссылку чтоб посмотреть как проще и правильнее...  smile     

Это сообщение отредактировал(а) Uзверь - 30.9.2009, 08:34
PM MAIL   Вверх
Bulat
Дата 30.9.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(Uзверь @  30.9.2009,  07:48 Найти цитируемый пост)
как проще и правильнее...  


Как проще и правильнее - использовать все дефолтные настройки. smile Изменят пути и т.п. конечно можно, но тогда есть вероятность проблем с запуском и т.п. Если не очень разбираешь ся во всем этом, то лучше пусть остаются все настройки какие были



--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Uзверь
  Дата 30.9.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



А вот все заработало через командную строку ! Спасибо всем за советы очень помогло!!! smile 

Это сообщение отредактировал(а) Uзверь - 30.9.2009, 11:00
PM MAIL   Вверх
Uзверь
Дата 30.9.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Ну вот такой вопрос еще есть у меня 
Вот пытаюсь все понять почему так а не так...
Вот мой дибильный код...

#!/usr/bin/perl
print "p1:\n";
$p1=<STDIN>;
print"p2:\n";
$p2=<STDIN>;
$s=$p1+$p2;    
print"$s:\n";
 
сумма чисел...
Выдает это       p1: p2: 0: 
Почему я немогу сам задать числа для двух переменных,он сразу просчитывает все с нулями и выдает 0...
Я ведь использую стандартный ввод с клавы...досих пор непойму почему неслушается... smile 

Это сообщение отредактировал(а) Uзверь - 30.9.2009, 10:49
PM MAIL   Вверх
shamber
Дата 30.9.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Uзверь, у меня все прекрасно работает. smile 
Код

p1:
34
p2:
34
68:

а вообще начните с того что добавляйте в начало каждого скрипта 
Код

use strict; 


Это сообщение отредактировал(а) shamber - 30.9.2009, 11:34
PM MAIL Jabber   Вверх
Uзверь
Дата 30.9.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



А вот ребят еще вопрос ?Сейчас работаю с выводом на экран в виде мультистроки содержимого лог файла... Покачто неработает...
вот код :

#!/usr/bin/perl
use strict;
open (LOG,"LOG.txt")
while ( $L=<LOG>){
print "$L:\n";     }

Пробую запускать через консоль.
Посмотрите такой алгоритм сработает и чего мне еще следует учесть при его выполнении,ну там где должен логфайл храниться...

Это сообщение отредактировал(а) Uзверь - 30.9.2009, 12:49
PM MAIL   Вверх
shamber
Дата 30.9.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Uзверь, 1 тема 1 вопрос.....

open (LOG,"LOG.txt") как вы хотите его открыть? на чтение запись?
PM MAIL Jabber   Вверх
Uзверь
Дата 30.9.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Вобще пытаюсь считать из логфайла сточку или весь текст одной длинной строчкой .Для развития и записать в файл чтонибудь можно...
PM MAIL   Вверх
amg
Дата 30.9.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  30.9.2009,  12:40 Найти цитируемый пост)
Покачто неработает...вот код :
В приведенном коде две ошибки: нет ; в строке с open и переменная используется без my (с use strict; это ошибка). И для любых операций с файлами нужны проверки. И предупреждения включать.
Код
#!/usr/bin/perl -w

use strict;
open (LOG,"LOG.txt") or die "Can't open: $!\n";
while (my $L = <LOG>) {
  chomp $L;
  print "$L:\n";
}



PM MAIL   Вверх
Bulat
Дата 30.9.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(amg @  30.9.2009,  16:07 Найти цитируемый пост)
В приведенном коде две ошибки: нет ; в строке с open и переменная используется без my (с use strict; это ошибка). И для любых операций с файлами нужны проверки. И предупреждения включать.


В дополнение к сказанному

Цитата(Uзверь @  30.9.2009,  12:40 Найти цитируемый пост)
Пробую запускать через консоль.
, то при неверном коде, синтаксисе и т.п. он всегда выдаст сообщение об ошибке, а то и не одно. smile



--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
b00
Дата 1.10.2009, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 27.9.2009
Где: Петербург

Репутация: нет
Всего: нет



Uзверь, с Вашего позволения посоветую скачать и постоянно иметь под рукой вот эту книгу:
http://www.proklondike.com/books/perl/matr...hitel_perl.html
Ну и как уже было сказано - обязательно добавляйте в начало своих скриптов use strict и use warnings (или делайте #!/path/to/perl -w). 90 процентов ошибок в этом случае Вы легко отловите сами.
PM MAIL WWW Jabber   Вверх
Uзверь
Дата 1.10.2009, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Балгодарю за ответы товарищи!Очень многое прояснилось! smile 
PM MAIL   Вверх
Uзверь
  Дата 1.10.2009, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Укажитека мне еще на ошибку...файл не хочет открываться говорит Can't open: No such file or director Вот. Я читал в одной книге что после интерпретатор можно еще прописывть путь к файлу вроде /..../.../LOG.txt .Чего я мог неучесть интересно...
PM MAIL   Вверх
amg
Дата 1.10.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(b00 @  1.10.2009,  07:18 Найти цитируемый пост)
обязательно добавляйте в начало своих скриптов use strict и use warnings
IMHO, use strict для небольших скриптов и для обучения только мешает. Вот для больших, а тем более многофайловых проектов -- там да, жизненно необходимо. use warnings (или perl -w), по моему опыту, полезно всегда. Еще посоветовал бы все локальные для данного блока переменные объявлять с помощью my (use strict к этому принуждает) -- ошибок будет меньше и к use strict легко будет перейти, если скрипт разрастётся.
PM MAIL   Вверх
Uзверь
  Дата 1.10.2009, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



 smile 

Это сообщение отредактировал(а) Uзверь - 1.10.2009, 09:20
PM MAIL   Вверх
amg
Дата 1.10.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Путь к файлу, если он не в текущей директории, конечно нужно прописывать.
open (LOG,'C:/.../.../LOG.txt') or die "Can't open: $!\n";
(Вместо точек, разумеется, названия директорий. Вместо прямого слеша для разделения путей можно использовать и обратный, но тогда будут неожиданности, если эта строка будет в двойных кавычках.
Цитата(Uзверь @  1.10.2009,  09:04 Найти цитируемый пост)
Я читал в одной книге что после интерпретатор можно еще прописывть путь к файлу вроде /..../.../LOG.txt .
Вот тут не понял. Что Вы называете "интерпретатор" ? Если мы понимаем под этим словом одно и то же, т.е. сам перл, то при вызове скрипта (опять же, если он не в текущей директории) нужно прописывать путь к скрипту:
perl C:/.../.../script.pl
И даже к перлу, если программа-установщик дистрибутива не позаботилась внести его в переменную окружения PATH (или как там она в виндах называется):
C:/perl/perl.exe C:/.../.../script.pl
Ну и, наконец, в параметрах к скрипту можно указать имя файла (с полным путем, если нужно).
perl script.pl LOG.txt
Тогда сам скрипт, печатающий этот файл, будет совсем коротким, только одна строка:
print while <>;
или даже
print <>;
PM MAIL   Вверх
b00
Дата 1.10.2009, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 27.9.2009
Где: Петербург

Репутация: нет
Всего: нет



Цитата(amg @  1.10.2009,  08:23 Найти цитируемый пост)
Еще посоветовал бы все локальные для данного блока переменные объявлять с помощью my (use strict к этому принуждает)

Именно поэтому и стоит использовать use strict  даже в самом начале изучения. Потом неожиданно пригождаются какие-то старые функции, а при их использовании не возникает проблем с видимостью переменных.
ИМХО, если уж учиться, то сразу на перспективу smile strict - прямо как правила хорошего поведения smile
Цитата(Uзверь @  1.10.2009,  08:05 Найти цитируемый пост)
Я читал в одной книге что после интерпретатор можно еще прописывть путь к файлу вроде /..../.../LOG.txt .Чего я мог неучесть интересно... 

Если Вы имеете в виду указание имени файла в параметрах запуска для своего скрипта, то Вам нужно его оттуда извлечь. Параметры, передаваемые при запуске, находятся в массиве @ARGV (наберите в гугле "системные переменные perl).
Соответственно если Вы хотите делать так:
$ ./my_script.pl logfile.log
то в скрипте должно быть:
my $input_file = shift; (можно добавить какое-то условие на случай, если файл не указан, например shift || die "укажите файл!";
ли так:
my $input_file = $ARGV[0];
PM MAIL WWW Jabber   Вверх
Uзверь
Дата 1.10.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



А как вы считаете сложно писать такию программу? Звучит так: Есть лог с атс а в нем номера телефонов,длительность разговоров ,и уникальный номер закрепленный за абонентом. Лог имеет такой вид 
N 076 00 5104    T001 020 03/12 13:04:12 00:00:30 .0 A9710189175023971                   
 &                                                                                    
 &                                     000                                           
N 077 00 A001 034 5238    03/12 13:04:15 00:00:58 .0                                     
 &                                                                                    
 &                                     000                                           
N 078 00 A001 006 5120    03/12 13:05:03 00:01:00 .0                                     
 &                                                                                    
 &                                     000                                           
N 079 00 5119    T001 019 03/12 13:06:00 00:00:44 .0 A971015182784                       
 &                                                                                    
 &                                     000                                           
N 080 00 5701    T001 018 03/12 13:06:52 00:00:18 .0 A971014992389030                    
 &                                                                                    
 &                                     000           

Задача такая.Написать код который бы открывал лог и считывал из него номера с кодами сотовых телов учитывая наибольшее время разоговоров.
Есть ли какие нибудь особенности у реализации такого алгоритма?
PM MAIL   Вверх
amg
Дата 1.10.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  1.10.2009,  13:59 Найти цитируемый пост)
А как вы считаете сложно писать такию программу?
Похоже, совсем несложно.
Но кое-что непонятно. Чем разделяются поля? Будет ли однозначным разделение строки по пробелам, когда несколько идущих подряд пробелов считыются одним? Где там номер телефона, а где ID абонента?

PM MAIL   Вверх
shamber
Дата 1.10.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Uзверь, а не скромный вопрос можно? Это задачка откуда? smile
PM MAIL Jabber   Вверх
Uзверь
Дата 1.10.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Вот номер абонента 0 A9710189175023971 начиная с восьмерки
А вот это внутренний номер абонента (внутри организации)  5104 
И число с длительностью 03/12 13:06:52 00:00:18 
А что насчет пробелов то их число значения не имеет. лог приведен в своем натуральном виде.
Пока вот думаю что да как и куда... smile

Добавлено через 1 минуту и 20 секунд
Задачка с места работы...познавательно развивающая smile 
PM MAIL   Вверх
Uзверь
Дата 1.10.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Как я понимаю мне нужно организовать чтение из лог файла по заданным параметрам выбора элементов... которые должны выводиться на экран?
PM MAIL   Вверх
amg
Дата 1.10.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Для начала попробуйте добавить что-нибудь в такой коротенький скрипт:
Код
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";
}
Вызывать скрипт нужно с log-файлом в качестве аргумента

PM MAIL   Вверх
Uзверь
  Дата 1.10.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



О-o спасибо!!! Щас буду  пробывть запускать smile 
PM MAIL   Вверх
Uзверь
Дата 2.10.2009, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Привет amg а можно если тебя не затруднит немного пояснить вот эту строчку из програмки
 $hash{$1}++; Ее смысл
  
Насколько я понял $sash это переменная. Два плюса -приращение на 1 (инкремент) . А вот про фигурные скобки и их содержимое не очень понял.

И если можно вот в этой  стоке foreach (sort {$a<=>$b} keys %hash) такой кусок с переменными  
{$a<=>$b} ,какой смысл несет в себе такая запись для чего они служат? В описалове узнал только о временной переменной $i инициализирующаяся нулем которая создается при старте фора.

Это сообщение отредактировал(а) Uзверь - 2.10.2009, 08:12
PM MAIL   Вверх
gcc
Дата 2.10.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



$hash{ключ} -

$1 - из регулярного выражения, там где (\d+)

++ записывает дальше

можно посмотреть что в хэше, сделать
Код


use Data::Dumper;
print Dumper(\%hash);

PM WWW ICQ Skype GTalk Jabber   Вверх
amg
Дата 2.10.2009, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  2.10.2009,  07:53 Найти цитируемый пост)
$hash{$1}++; Ее смысл
$1 -- в ней номер телефона из предыдущего удачно сработавшего регулярного выражения. Этот номер будет ключом хэша %hash
Коеструкция $hash{$1}++; создает элемент хэша с данным ключом, если этого элемента не было и затем инкрементирует его значение (undef+1=1). Если элемент хэша с данным ключом уже есть, то его значение просто инкрементируется. 
Таким образом, получаем хэш, в котором ключи -- это номера телефонов (уникальные, в хэше иных быть не может по определению), а значения -- сколько раз этот номер телефона встречается.

Я понимаю, что приведенный мной код -- это не то, что Вам нужно, но в качестве затравки послужить может. Далее, очевидно, нужно в значения хэша помещать не количество звонков, а, например, анонимный массив или хэш с нужной информацией. Или, возможно, с самого начала делать хэш не по номерам телефонов, а по ID абонентов, если, например, сортировка по ID более важна. Готов и здесь помочь (понимаю, что окунуться сразу в структуры данных перла -- это можно и утонуть), но для этого Вы должны сказать, как должен выглядеть вывод предполагаемого скрипта (даже не просто сказать а сочинить его, например, для того куска лога, который приводили выше, точно в том виде, в котором скрипт его выдал бы).


PM MAIL   Вверх
Uзверь
  Дата 2.10.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



amg Очень благодарен за подробные обьяснения! smile . Вывод должен быть примерно таким. На экран должна выдаваться информация:  номер сотового телефона A9710189175023971 на который звонил абонентизнутри, уникальный идентификатор абонента (внутренний номер как в логе 5104 ) а также длительность вызова с датой как в логе 03/12 13:04:12 00:00:30

Стараюсь вразуметь что-нибудь в главе "Регулярных выражений"перл актив smile 
PM MAIL   Вверх
amg
Дата 2.10.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  2.10.2009,  10:11 Найти цитируемый пост)
На экран должна выдаваться информация:  номер сотового телефона A9710189175023971 на который звонил абонентизнутри, уникальный идентификатор абонента (внутренний номер как в логе 5104 ) а также длительность вызова с датой как в логе 03/12 13:04:12 00:00:30
Т.е. посто напечатать подходящие строки лога, убрав из них лишнее и переставив отдельные куски, без какой-либо статистики и сортировки? Тогда совсем просто, ни хэши, ни многомерные структуры данных не нужны:
Код
die "Usage: $0 log.txt\n" unless @ARGV;
printf "%-18s%-6s%-6s%-9s%-9s\n", qw(PHONE ID DATE TIME DURATION);
while (<>) {
  m/^N/ || next;
  m/\sA\d+\s*$/ || next;
  # 0 1   3  3       4    5   6     7        8        9  10
  # N 076 00 5104    T001 020 03/12 13:04:12 00:00:30 .0 A9710189175023971                   
  my ($ID,$date,$time,$duration,$phone) = (split)[3,6..8,10];
  printf "%-18s%-6s%-6s%-9s%-9s\n", $phone,$ID,$date,$time,$duration;
}


PM MAIL   Вверх
Uзверь
Дата 2.10.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Ничего себе програмка!!!Щас буду осваивать со скрипом smile а насчет вывода строки на экран то выводить можно всю строчку с телефоном целиком.Просто судь программы в том чтобы можно было прописать в скрипт лог и открывая его был выдан список тех кто звонил на сотовые телы.Просто список.Столбцом.А если совсем чтобы круто то чтобы скрипт анализировал временные интервалы длительности звонков и выдавал в столбец только строки тех абонентов которые его привысили smile 
PM MAIL   Вверх
amg
Дата 2.10.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  2.10.2009,  11:33 Найти цитируемый пост)
выводить можно всю строчку с телефоном целиком.
Тогда и скрипт то не нужен! Достаточно набрать в командной строке и исполнить команду 
perl -ne "print if /^N.+A\d+\s*$/" LOG.txt
Цитата(Uзверь @  2.10.2009,  11:33 Найти цитируемый пост)
чтобы скрипт анализировал временные интервалы длительности звонков и выдавал в столбец только строки тех абонентов которые его привысили

Задай $limit где-нибудь в начале и добавь пару строк перед printf (который в цикле):
  my ($h,$m,$s) = split /:/, $duration;
  next if $h*3600+$m*60+$s < $limit;

PM MAIL   Вверх
JackYF
Дата 3.10.2009, 10:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Uзверь, 
 ! 
JackYF
Модератор: Пожалуйста, один топик - один вопрос.
.




--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Страницы: (3) [Все] 1 2 3 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0906 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.