Zase ten perl ...

Honza Pazdziora adelton na informatics.muni.cz
Úterý Duben 1 13:51:28 CEST 1997


> >
> >  open(MAIN,"$file") || die $!;
> >  @main = <MAIN>;
> >  close(MAIN);
> >
> >  open(MAIN,">$file") || die $!;
> >  foreach $main_line (@main)     {
> >      if ($main_line =~ /$pozn/) 
> >         {
> >           print MAIN "$main_line";
> >           print MAIN "	$num	\n";
> >         }
> >      else 
> >         { print MAIN "$main_line"; }
> >    }
> >  close(MAIN);
> >
> >Chtel bych, aby tento kod :
> >1) vyhledal v souboru $file radek s obsahem $pozn (coz ucini)
> >2) az ho najde, aby ho prepsal jim samym (coz ucini)
> >3) prepsal nasledujici radek velicinou <tab>$num<tab> (coz NEucini) - ucini
> >to, za zapise <tab>$num<tab> PRED nasledujici radek (=vlozi radek s
> >hodnotou <tab>$num<tab> za radek s @pozn :-((((

Resp. za radek s $pozn :-(

> 1) ten program dela presne to co ma (zkuste se vzdycky nejdriv  zamyslet,
>  nez to nekam poslete)

Spravne, program vzdycky dela presne to, co rika jeho zdrojak, ze ma
delat.

> 2) pokud nechcete aby tam byl ten radek nasledujici za "$pozn", je treba ho
>  nejspis odstranit aby se netisknul; treba:
> 
> ..
>          {
>          print MAIN "$main_line";
> 			shift @main;
>          print MAIN "   $num  \n";
>          }
> ..

No nevim, to zadani neni moc presne. Me napoprve napadl tento one-liner

perl -i -ne 'print ($dont ? "krtek\n" : $_ ); $dont = 0; $dont = 1 if /jezek/;'

ktery ale da ponekud jiny vysledek, nez ta tvoje uprava. Protoze co
kdyz se jezek vyskytuje ve dvou radcich po sobe? Ja nahradim i ten
radek za druhym vyskytem, protoze ho testuju, zatimco tim shiftem uz
se na neho nedostanes. Coz muze byt vyhoda i nevyhoda, kdo vi.

------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
                   I can take or leave it if I please
------------------------------------------------------------------------


Další informace o konferenci Linux