regularny vyraz na prehladavanie viac riadkov.
Honza Pazdziora
adelton na informatics.muni.cz
Pátek Listopad 30 12:49:31 MET 2001
On Fri, Nov 30, 2001 at 12:34:31PM +0100, Marian Cavojsky wrote:
> >
> > Tecka v regularnim vyrazu defaultne nematchuje na \n, takze to .*?
> > nepreleze na dalsi radek, kde by to datum slo nalezt. Pouzijte /s.
>
> Nefunguje ani /s ani /ms
>
> posielam program:
> $date = '';
> $buffer = '';
> open FILEIN, "<".$ARGV[0] or die( "Error: '".$ARGV[0]."'");
> while( <FILEIN>){
> if( /^From /){
> if( $date ne ''){
> $date = $2.$1 if( $buffer =~ /Received:.*?\d?\d\s(\w{3})\s(\d{4})/ms);
> open FILE, ">>".$ARGV[0].".".$date or die( "Error: '".$ARGV[0]."'");
> print "Append '".$ARGV[0].".".$date."'\n";
> print FILE $buffer;
> close FILE;
> $buffer = '';
> }
> }
> $buffer .= $_;
> }
> close FILEIN;
Neda se predpokladat, ze na radku, ktery je pokracovaci v Received:,
je na zacatku zaroven From_. Coz je presne to, do ceho Perl tim
if (/^From /) { nutite. Proc to proste nenastete jako jeden retezec (at
uz po radkach nebo pomoci $/ = undef) a pak na to jednou nepustite
Received? Dostal byste prvni rozumny match a bylo by po problemu.
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, DBI, Oracle, MySQL, auth. WWW servers, DBD::XBase.
------------------------------------------------------------------------
Další informace o konferenci Perl