linux-l: 2-facher Dokumentendurchlauf

Oliver Bandel oliver at first.in-berlin.de
Sa Mai 13 22:35:53 CEST 2000


Hi!

On Thu, 11 May 2000, Manuel Tennert wrote:

> Kleines Problem mit Perl:
> Ich starte ein Script, welches mit Hilfe von while ($zeile = <>) {......
> zeile für zeile durch ein Text-File läuft...logo....nun will ich
> innerhalb dieser Schleife eine Bedingung setzen. In dieser soll das
> Dokument nochmals von vorn durchlaufen werden. Nach Beendigung dieser 2.
> Bedingung soll der Dokumentdurchlauf fortgesetzt werden und zwar an der
> Stelle wo der erste Durchlauf unterbrochen wurde ! Schön kompliziert ???
> Wenn jemand Rat weiß möge er mir mailen !!! Bitte !!!
> 
> Manuel

Falls von Deiner Problembeschreibung noch nach den diversen
Nachbessrungen etwas dran sein sollte, kannst Du ja mal mit
diesem Gerüst hier etwas herum probieren:

****************************************
#!/usr/bin/perl

$pass_max = 3; # zum Beispiel mal drei Durchläufe machen...

$linenum = `wc -l $ARGV[0];`; # Hole Länge der Datei in Zeilen (*)

# (*): Muss man ggf. ein kleines Script erstellen, das einem die
#      Funktionalität von wc auf Deiner NT-Plattform auch bereit
#      stellt... selbst schreiben (in Perl zum Beispiel:-)), oder
#      Cygnus-Tools installieren, die sollten das "wc" eigentlich
#      kennen (?!).

$pass = 1;
while(<>)
{
  print "Zeile $.: "; # bei jedem Pass!, weil in keiner if...
  print;              # bei jedem Pass!, weil in keiner if...

  if( $pass == 1 )
  {
    push @zeilen_merker, $_ if /matchstring/;
  }

  if( $pass == 2 )
  {
    print "==> alle gemerkten Zeilen: @zeilen_merker\n";
    # Das das hier nun bei jeder gelesenen Zeile jedesmal
    # wieder ausgegeben wird ist zwar Blödsinn,
    # aber es soll ja auch bloss als Beispiel dienen.
  }

  if( $pass == 3 )
  {
    # blah
  }

  if( $. == $linenum)
  {
    seek(ARGV,0,SEEK_SET);
    $. = 0;
    last if $pass == $pass_max;
    ++$pass;
  }
}
****************************************


Tschüß,
   Oliver

-- 
Tap as Tap can!    1. Internationales        Infos: http://www.germantap.org/
***************    Steptanzfestival Berlin,         specials/2000/istf-01.shtml
                   25. - 27. Mai 2000



Mehr Informationen über die Mailingliste linux-l