- Вытащить строку из файла, 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
|