The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Поиск в файле"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Поиск в файле"  
Сообщение от l5 on 22-Фев-06, 13:25 
День добрый.

Есть файл test.txt:
<line1>line1 text</line1>
<line2>line2 text</line2>

И есть скрипт:
#!/usr/local/bin/perl

my $file = 'test.txt';
my $text = grep_file($file, '<line1>([^<]+)<');
print "found: '$text'\n";

$text = grep_file($file, '<line2>([^<]+)<');
print "found: '$text'\n";

sub grep_file {
    my $exclusive_lock = 2;
    my $unlock_lock = 8;
    my $file = @_[0];
    my $pattern = @_[1];
    print "pattern = '$pattern'\t---\t";

    open  (FILE, $file) || print "couldn't open $file\n" && return;
    flock (FILE, $exclusive_lock);
    foreach my $line (<FILE>) {
        $line =~ m/^\#/o && next; # ignore comments
        $line =~ m/$pattern/o || next;
        return $1;
    }
    flock (FILE, $unlock_lock);
    close (FILE);
}

Почему-то ищется всегда толко первый паттерн:
% ./tst.pl
pattern = '<line1>([^<]+)<'     ---     found: 'line1 text'
pattern = '<line2>([^<]+)<'     ---     found: 'line1 text'

Подскажите в чем ошибка.
Спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Поиск в файле"  
Сообщение от ACCA (ok) on 23-Фев-06, 10:14 
>Подскажите в чем ошибка.

$line =~ m/$pattern/ || next;

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Поиск в файле"  
Сообщение от l5 on 23-Фев-06, 12:22 
>$line =~ m/$pattern/ || next;
Вот ведь %-))
Спасибо!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Поиск в файле"  
Сообщение от ACCA (ok) on 25-Фев-06, 08:55 
ты ещё FILE ни разу не закрываешь. Программа корявая - читают обычно через while(<>) и делают всё в один проход.

while (<>) {
  next if (/^\s*#/o);
  while (m!<(\w+)>(.?+)</\w+>!go) {
      $data{$1} = $2;
  }
}

И вообще XML [руками] разбирать не стоит - есть более другие способы.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру