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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с regexp'ом, Выводит первое выражение и not found 
:(
    Опции темы
Rusher
Дата 22.11.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я в Perl новичок... В принципе я вообще в программировании новичок... Прошу помощи.

Есть лог-файл. В нем всего одна строка, которая выглядит так:

2006-11-22      10:29:00        0       6

Пишу скрипт для разбивки этой строки:

#!/usr/bin/perl

open (F, "/var/log/meridian/meridian.log |");

while (<F>) {

if (/(.)\t(.)\t(.)\t(.)/) {

$date = $1;
$time = $2;
$first_pri = $3;
$second_pri = $4;

close (F);

}

print "$first_pri\n$second_pri\n$date\n$time\n";

exit;

}

Выводит:

2006-11-22: not found

И как я только это regexp не писал (и с "\s+" вместо "\t", и описывал всё досконально, например - ([0-9]+-+[0-9]+-+[0-9]) и т.д.) , всё равно выводит одно и тоже...

Подскажите, где грабли... Или это я... smile 
PM MAIL ICQ   Вверх
amg
Дата 22.11.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Во-первых, чтение файла. Если очень хочется вариант с трубой (|), то надо что-то вроде
Код

open (F, "cat /var/log/meridian/meridian.log |");

но лучше просто 
Код

open (F, "/var/log/meridian/meridian.log") or die "Can't open log-file: $!\n";
while (<F>) {
  # Разбить строку $_ по пробелам. Один из многих вариантов.
  ($date, $time, $first_pri, $second_pri) = split;
close (F);
 
PM MAIL   Вверх
Rusher
Дата 22.11.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



amg, огромное спасибо! Ваш вариант работает без проблем. Вот только я так и не понял, почему не работает мой...без "split".
PM MAIL ICQ   Вверх
amg
Дата 22.11.2006, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Rusher @  22.11.2006,  12:26 Найти цитируемый пост)
Вот только я так и не понял, почему не работает мой...без "split".
 В регулярных выражениях точка - это один символ. Твою регулярку (если разделители - табуляторы) надо написать так: 
Код

/(.+)\t(.+)\t(.+)\t(.+)/;
$date = $1;
$time = $2;
$first_pri = $3;
$second_pri = $4;

Или так 
Код

($date, $time, $first_pri, $second_pri) = /([^\t]+)/g;

Или со сплитом 
Код

($date, $time, $first_pri, $second_pri) = split /\t/, $_;


Это сообщение отредактировал(а) amg - 22.11.2006, 13:07
PM MAIL   Вверх
Rusher
Дата 22.11.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



amg, ещё раз огромное спасибо за разъяснения. Теперь ещё напишу скрипт для забирания этого файла по scp и всё будет ОК.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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