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