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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Некоторые операторы Perl, Неработает оператор 
:(
    Опции темы
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   Вверх
Страницы: (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.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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