![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Uзверь, Ваши вопросы слишком не конкретны, и ответить на них можно только столь же не конкретно, например:Работает...
И т.д. Приведите свой код, тогда будет понятно, что не так. Если для Windows, то Active Perl |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 1 Всего: 13 |
а у вас что пишет при запуске? -------------------- |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
После запуска выдает только V1:
А в поле подсказок и ошибок пустота... Пишет что стоит после принта. А ввод с экрана не выполняется. STDIN почемуто неработает... Это сообщение отредактировал(а) Uзверь - 28.9.2009, 10:55 |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Да все нормально. Должно работать, и, как продемонстрировал DEER, работает. Только, если запускать скрипт, тыча мышкой в его иконку, то можно не успеть заметить результат (запускать нужно из консоли).
Upd. А, так Вы запускаете скрипт из-под какой-то IDE? Попробуйте из консоли. Это сообщение отредактировал(а) amg - 28.9.2009, 11:00 |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Я из интерпретатора запускать пробую Ф9
Но вот к сожалению неполучается...Может быть что интерепретатор тупит? Вроде он должен подождать пока я введу значения... |
|||
|
||||
| DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 1 Всего: 13 |
запускай из командной строки и будет тебе счастье
-------------------- |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Благодарю щас буду пробывать!
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Да ну...у меня машина какая-то бесовская... Из командной строки не запускает...максимум открывает этот файлик в интерпритаторе
Это сообщение отредактировал(а) Uзверь - 29.9.2009, 10:35 |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
для начала мона попробовать самую стандартную команду для запуска C:\Path_to_perl\perl.exe your_script_name.pl -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Всем доброго утра! Вопрос по установке перла и апача. Я извиняюсь но не моглибы мне сказать должен ли я при установке указывать другие пути, не те которые задаются по умолчанию инсталером ?И при установке перла тоже самое как и с апачем...Если стоит следовать инструкциям по установке этого дела хотелось бы получить ссылку чтоб посмотреть как проще и правильнее...
Это сообщение отредактировал(а) Uзверь - 30.9.2009, 08:34 |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
Как проще и правильнее - использовать все дефолтные настройки. -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
А вот все заработало через командную строку ! Спасибо всем за советы очень помогло!!!
Это сообщение отредактировал(а) Uзверь - 30.9.2009, 11:00 |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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... Я ведь использую стандартный ввод с клавы...досих пор непойму почему неслушается... Это сообщение отредактировал(а) Uзверь - 30.9.2009, 10:49 |
|||
|
||||
| shamber |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Uзверь, у меня все прекрасно работает.
а вообще начните с того что добавляйте в начало каждого скрипта
Это сообщение отредактировал(а) shamber - 30.9.2009, 11:34 |
||||
|
|||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Uзверь, 1 тема 1 вопрос.....
open (LOG,"LOG.txt") как вы хотите его открыть? на чтение запись? |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Вобще пытаюсь считать из логфайла сточку или весь текст одной длинной строчкой .Для развития и записать в файл чтонибудь можно...
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
В приведенном коде две ошибки: нет ; в строке с open и переменная используется без my (с use strict; это ошибка). И для любых операций с файлами нужны проверки. И предупреждения включать.
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
В дополнение к сказанному , то при неверном коде, синтаксисе и т.п. он всегда выдаст сообщение об ошибке, а то и не одно. -------------------- менеджер по кодеврайтингу |
|||
|
||||
| b00 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.9.2009 Где: Петербург Репутация: нет Всего: нет |
Uзверь, с Вашего позволения посоветую скачать и постоянно иметь под рукой вот эту книгу:
http://www.proklondike.com/books/perl/matr...hitel_perl.html Ну и как уже было сказано - обязательно добавляйте в начало своих скриптов use strict и use warnings (или делайте #!/path/to/perl -w). 90 процентов ошибок в этом случае Вы легко отловите сами. |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Балгодарю за ответы товарищи!Очень многое прояснилось!
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Укажитека мне еще на ошибку...файл не хочет открываться говорит Can't open: No such file or director Вот. Я читал в одной книге что после интерпретатор можно еще прописывть путь к файлу вроде /..../.../LOG.txt .Чего я мог неучесть интересно...
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) Uзверь - 1.10.2009, 09:20 |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Путь к файлу, если он не в текущей директории, конечно нужно прописывать.
open (LOG,'C:/.../.../LOG.txt') or die "Can't open: $!\n"; (Вместо точек, разумеется, названия директорий. Вместо прямого слеша для разделения путей можно использовать и обратный, но тогда будут неожиданности, если эта строка будет в двойных кавычках.
perl C:/.../.../script.pl И даже к перлу, если программа-установщик дистрибутива не позаботилась внести его в переменную окружения PATH (или как там она в виндах называется): C:/perl/perl.exe C:/.../.../script.pl Ну и, наконец, в параметрах к скрипту можно указать имя файла (с полным путем, если нужно). perl script.pl LOG.txt Тогда сам скрипт, печатающий этот файл, будет совсем коротким, только одна строка: print while <>; или даже print <>; |
|||
|
||||
| b00 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.9.2009 Где: Петербург Репутация: нет Всего: нет |
Именно поэтому и стоит использовать use strict даже в самом начале изучения. Потом неожиданно пригождаются какие-то старые функции, а при их использовании не возникает проблем с видимостью переменных. ИМХО, если уж учиться, то сразу на перспективу
Если Вы имеете в виду указание имени файла в параметрах запуска для своего скрипта, то Вам нужно его оттуда извлечь. Параметры, передаваемые при запуске, находятся в массиве @ARGV (наберите в гугле "системные переменные perl). Соответственно если Вы хотите делать так: $ ./my_script.pl logfile.log то в скрипте должно быть: my $input_file = shift; (можно добавить какое-то условие на случай, если файл не указан, например shift || die "укажите файл!"; ли так: my $input_file = $ARGV[0]; |
||||
|
|||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 Задача такая.Написать код который бы открывал лог и считывал из него номера с кодами сотовых телов учитывая наибольшее время разоговоров. Есть ли какие нибудь особенности у реализации такого алгоритма? |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Похоже, совсем несложно.
Но кое-что непонятно. Чем разделяются поля? Будет ли однозначным разделение строки по пробелам, когда несколько идущих подряд пробелов считыются одним? Где там номер телефона, а где ID абонента? |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Uзверь, а не скромный вопрос можно? Это задачка откуда?
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Вот номер абонента 0 A9710189175023971 начиная с восьмерки
А вот это внутренний номер абонента (внутри организации) 5104 И число с длительностью 03/12 13:06:52 00:00:18 А что насчет пробелов то их число значения не имеет. лог приведен в своем натуральном виде. Пока вот думаю что да как и куда... Добавлено через 1 минуту и 20 секунд Задачка с места работы...познавательно развивающая |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Как я понимаю мне нужно организовать чтение из лог файла по заданным параметрам выбора элементов... которые должны выводиться на экран?
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Для начала попробуйте добавить что-нибудь в такой коротенький скрипт:
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
О-o спасибо!!! Щас буду пробывть запускать
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Привет amg а можно если тебя не затруднит немного пояснить вот эту строчку из програмки
$hash{$1}++; Ее смысл Насколько я понял $sash это переменная. Два плюса -приращение на 1 (инкремент) . А вот про фигурные скобки и их содержимое не очень понял. И если можно вот в этой стоке foreach (sort {$a<=>$b} keys %hash) такой кусок с переменными {$a<=>$b} ,какой смысл несет в себе такая запись для чего они служат? В описалове узнал только о временной переменной $i инициализирующаяся нулем которая создается при старте фора. Это сообщение отредактировал(а) Uзверь - 2.10.2009, 08:12 |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
$hash{ключ} -
$1 - из регулярного выражения, там где (\d+) ++ записывает дальше можно посмотреть что в хэше, сделать
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
$1 -- в ней номер телефона из предыдущего удачно сработавшего регулярного выражения. Этот номер будет ключом хэша %hash
Коеструкция $hash{$1}++; создает элемент хэша с данным ключом, если этого элемента не было и затем инкрементирует его значение (undef+1=1). Если элемент хэша с данным ключом уже есть, то его значение просто инкрементируется. Таким образом, получаем хэш, в котором ключи -- это номера телефонов (уникальные, в хэше иных быть не может по определению), а значения -- сколько раз этот номер телефона встречается. Я понимаю, что приведенный мной код -- это не то, что Вам нужно, но в качестве затравки послужить может. Далее, очевидно, нужно в значения хэша помещать не количество звонков, а, например, анонимный массив или хэш с нужной информацией. Или, возможно, с самого начала делать хэш не по номерам телефонов, а по ID абонентов, если, например, сортировка по ID более важна. Готов и здесь помочь (понимаю, что окунуться сразу в структуры данных перла -- это можно и утонуть), но для этого Вы должны сказать, как должен выглядеть вывод предполагаемого скрипта (даже не просто сказать а сочинить его, например, для того куска лога, который приводили выше, точно в том виде, в котором скрипт его выдал бы). |
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
amg Очень благодарен за подробные обьяснения!
Стараюсь вразуметь что-нибудь в главе "Регулярных выражений"перл актив |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Т.е. посто напечатать подходящие строки лога, убрав из них лишнее и переставив отдельные куски, без какой-либо статистики и сортировки? Тогда совсем просто, ни хэши, ни многомерные структуры данных не нужны:
|
|||
|
||||
| Uзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.9.2009 Репутация: нет Всего: нет |
Ничего себе програмка!!!Щас буду осваивать со скрипом
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Тогда и скрипт то не нужен! Достаточно набрать в командной строке и исполнить команду
perl -ne "print if /^N.+A\d+\s*$/" LOG.txt
Задай $limit где-нибудь в начале и добавь пару строк перед printf (который в цикле): my ($h,$m,$s) = split /:/, $duration; next if $h*3600+$m*60+$s < $limit; |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
Uзверь,
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |