The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Вытащить строку из файла, !*! ALUM, 05-Июн-08, 13:10  [смотреть все]
open FN, "$Epr_file_name" || die "Файл не найден!";
foreach( <FN> )
{ $Wget_epr .= $_; }
close FN;

теперь надо найти в $Wget_epr подстроку "Software realese 3.0.0" и взять только цифры с точками.

помогите пожалуйста, моск рушится

  • Вытащить строку из файла, !*! Mil, 13:29 , 05-Июн-08 (1)
    >open FN, "$Epr_file_name" || die "Файл не найден!";
    >foreach( <FN> )
    >{ $Wget_epr .= $_; }
    >close FN;
    >
    >теперь надо найти в $Wget_epr подстроку "Software realese 3.0.0" и взять только
    >цифры с точками.
    >
    >помогите пожалуйста, моск рушится

    if ($Wget_epr=~m/Software\srealese\s([\d.]+)/) {
      print "найдено $1\n";
    } else {
      print "не найдено\n";
    }

    ---
    а вообще Perl -- зло :-)

    • Вытащить строку из файла, !*! ALUM, 13:41 , 05-Июн-08 (2)
      >[оверквотинг удален]
      >>помогите пожалуйста, моск рушится
      >
      >if ($Wget_epr=~m/Software\srealese\s([\d.]+)/) {
      >  print "найдено $1\n";
      >} else {
      >  print "не найдено\n";
      >}
      >
      >---
      >а вообще Perl -- зло :-)

      не ловит.

      пример файла:

          <TD height="24" COLSPAN=1 align=right background="imagesnavi/topbg3.gif" align="right" class="header">
       DVD Rel. 20  - Software release 4.1.0   </TD>

      • Вытащить строку из файла, !*! Mil, 15:17 , 05-Июн-08 (3)
        >[оверквотинг удален]
        >>
        >>---
        >>а вообще Perl -- зло :-)
        >
        >не ловит.
        >
        >пример файла:
        >
        >    <TD height="24" COLSPAN=1 align=right background="imagesnavi/topbg3.gif" align="right" class="header">
        > DVD Rel. 20  - Software release 4.1.0   </TD>

        так вы определитесь, что вам надо искать release или realese и ищите именно это :-)

        • Вытащить строку из файла, !*! ALUM, 16:36 , 05-Июн-08 (5)
          >[оверквотинг удален]
          >>
          >>не ловит.
          >>
          >>пример файла:
          >>
          >>    <TD height="24" COLSPAN=1 align=right background="imagesnavi/topbg3.gif" align="right" class="header">
          >> DVD Rel. 20  - Software release 4.1.0   </TD>
          >
          >так вы определитесь, что вам надо искать release или realese и ищите
          >именно это :-)

          дело не в неправильном написании, эту ошибку я сразу просёк, за идиота не держите.

          • Вытащить строку из файла, !*! andy, 06:52 , 06-Июн-08 (6)
            [red@mail ~/dev/perl/re]$ ls -l
            total 4
            -rwxr-xr-x  1 red  red  475  6 июн 10:43 on20080606
            -rw-r--r--  1 red  red  163  6 июн 10:41 on20080606.txt
            [red@mail ~/dev/perl/re]$
            [red@mail ~/dev/perl/re]$ cat ./on20080606
            #!/usr/bin/perl
            use strict;
            use warnings;
            use vars qw( $text $release );
            sub get_release($);

            open(F, '<', 'on20080606.txt') or die($!); $text.= $_ while <F>; close(F);

            if( defined( $release = get_release($text) ) ) {
                printf "found release %s\n", $release;
            } else {
                printf "nothing found\n";
            }

            sub get_release($) {
                my($text, $release);
                $text = shift;
                ( $release ) = $text =~ / \b software \s+ release \s+ (\d[a-z0-9.]*) \b /gxis;
                return $release;
            }
            [red@mail ~/dev/perl/re]$
            [red@mail ~/dev/perl/re]$
            [red@mail ~/dev/perl/re]$ cat ./on20080606.txt
               <TD height="24" COLSPAN=1 align=right
               background="imagesnavi/topbg3.gif" align="right" class="header">
            DVD Rel. 20  - Software
            release 11.Pre4</TD>
            gfwd
            [red@mail ~/dev/perl/re]$
            [red@mail ~/dev/perl/re]$ ./on20080606
            found release 11.Pre4
            [red@mail ~/dev/perl/re]$


            >а вообще Perl -- зло :-)

            любой инструмент или неудобен или опасен, если не читать мануалы к нему (ни к кому лично фраза не относится, просто комментарий)

            • Вытащить строку из файла, !*! madskull, 10:17 , 06-Июн-08 (7)
              че-та как-то много всего...

              open F,"<file" or die $!;
              ($_=join "",<F>)=~s/^.+software\s+release\s+(.+?)\s.+/$1/si;
              print;

              Хотя, если в целях обучения... все равно много :)

              • Вытащить строку из файла, !*! angra, 10:36 , 06-Июн-08 (8)
                Вы это проверяли хоть? Проверьте на строке:
                software release 1.23
                То есть без лишних символов в начале и одиночного пробельного и произвольных дальше в конце. Я бы сказал что ваш регекс нежизнеспособен, слишком специфические условия ему подавай.  
                Но даже если хочется короче, то я бы все-таки предпочел:
                open F,"<a" or die $!;map {print "$1\n" if /software\s+release\s+([\d.]+)/i} <F>
                Хотя еще правильней было бы использовать такой:
                open F,"<a" or die $!;foreach (<F>) {print "$1\n" if /[Ss]oftware\s+[Rr]elease\s+([\d.]+)/}
                Данный вариант не ест лишней памяти и будет нормально работать на больших файлах, также избавлен от проблем со скоростью у /i.
                • Вытащить строку из файла, !*! madskull, 12:33 , 06-Июн-08 (9)
                  >Вы это проверяли хоть? Проверьте на строке:
                  >software release 1.23
                  >То есть без лишних символов в начале и одиночного пробельного и произвольных
                  >дальше в конце. Я бы сказал что ваш регекс нежизнеспособен, слишком
                  >специфические условия ему подавай.

                  Конечно проверял. На том примере, чтобыл дан - работает.
                  Да я и не ставил целью сделать что-то универсальное. Есть задача - есть решение.
                  Если бы мне понадобилось выдрать что-то из файла, я бы сделал примерно так, однострочником и не задумываяь о памяти, скорости и тому подобном.
                  Мало того, я бы даже не стал заморачиваться с открытием файла, а сделал бы что-то вроде
                  perl -wlne '/Software release (.+?) / && print $1' file

                  И вообще, я не регексп демонстрировал, а то, что можно сделать намного короче.

      • Вытащить строку из файла, !*! vg, 16:11 , 05-Июн-08 (4)
        >[оверквотинг удален]
        >>>помогите пожалуйста, моск рушится
        >>
        >>if ($Wget_epr=~m/Software\srealese\s([\d.]+)/) {
        >>  print "найдено $1\n";
        >>} else {
        >>  print "не найдено\n";
        >>}
        >>
        >>---
        >>а вообще Perl -- зло :-)

        man perlre




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

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