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