regularny vyraz na prehladavanie viac riadkov.

Honza Pazdziora adelton na fi.muni.cz
Pátek Listopad 30 13:17:44 MET 2001


On Fri, 30 Nov 2001 11:51:20 +0000 (UTC), Honza Pazdziora <adelton na informatics.muni.cz> wrote:
> > $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.

Jo, a teda jeste:

	if ($date ne '') {

ma byt pravdepodobne psano jako

	if ($date eq '') {

protoze jinak se do tehle vetve nikdy nedostanete -- $date je na
zacatku inicializovano na ''.

A pokud to poustite na mailbox, takze vzdycky na zacatku dalsiho mailu
nekam zapisujete ten predchozi, tak mate problem s tim poslednim.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
Petition for a Software Patent Free Europe http://petition.eurolinux.org
------------------------------------------------------------------------


Další informace o konferenci Perl