regularny vyraz na prehladavanie viac riadkov.

Marian Cavojsky cavojsky na soria-grey.sk
Pátek Listopad 30 13:05:48 MET 2001


On Fri, Nov 30, 2001 at 12:50:57PM +0100, Honza Pazdziora wrote:
> 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.
> 

Dufam, ze som to nepokaslal, ale ma to pracovat takto:
najde prvy From tak sa date rovna '' pokracuje dalej a prida do $buffer
nacitany riadok. Pridava nacitane riadky do $buffer kym nenajde dalsi
>From ( - dalsi mail) ....

Tak a uz som to nasiel $date sa nema moznost nastavit a nikdy sa
nedostane do if( $date ...

Vdaka.

-- 
Marian Cavojsky <cavojsky @ soria-grey.sk>
Spravca siete, Soria & Grey s.r.o, reklamna agentura

Windows&Office jsou jako droga. Krasny a prijemny prvni dojem,
zvyknes si a nemuzes uz bez nich zit.
A pak zacnou prichazet vedlejsi ucinky ...



Další informace o konferenci Perl