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