Thread Suchen von Unten nach Oben: Suchen von UNTEN nach OBEN (57 answers)
Opened by yasukatakaya at 2007-05-31 11:57

bloonix
 2007-06-05 18:06
#77118 #77118
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
hi yasukatakaya,

[quote=yasukatakaya,05.06.2007, 10:29]Moin,
ich verstehe nicht so ganz, was zwischen diesen Zeilen passiert aus dem oberen Prog[/quote]
das ist recht einfach! Um ein Perlskript zu verstehen, reicht es oft, es wie
ein Buch zu lesen... schau her...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# für jede Zeile
while (my $line = <$fh>) {
  # schneide das Newline ab  
  chomp($line);
  # beende die Schleife wenn $hit WAHR ist UND die Zeile leer ist
  last if $hit && $line =~ /^$/;
  # setze $hit auf WAHR wenn die Zeile leer ist
  $hit = 1 if $line =~ /^$/;
  # schiebe die Zeile in das Array wenn $hit WAHR ist
  push @fehler, $line if $hit;
}

# verbinde jedes Element aus dem Array @fehler mit einem Whitespace
$fehler = join(' ', @fehler);
# ersetze doppelte Whitespaces durch ein einfaches
$fehler =~ s/\s+/ /g;


Die Schleife hat nur bei deiner ersten Datei funktioniert, weil zwischen dem
ersten PASS und dem ersten FAIL zwei Leerzeilen da waren. Wenn mehrere
Leerzeilen auftreten oder sich die Struktur verändert, dann passt meine
Suche natürlich nicht mehr genau. Ich glaube aber, dass ich jetzt weiß, wie
man es besser machen könnte... versuch mal dieses Codestück:

Code: (dl )
1
2
3
4
5
6
7
   while (my $line = <$fh>) {
     chomp($line);
     #last if $hit && $line =~ /^$/;
     last if $end_pos <= tell($fh);
     $hit = 1 if $line =~ /^\z/;
     push @fehler, $line if $hit;
  }


Ich weiß nicht, warum ich $end_pos nicht sofort benutzt habe, denn
eigentlich habe ich mir die Position von FAIL doch im ersten Schleifendurch-
lauf gemerkt...\n\n

<!--EDIT|opi|1181052480-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread Suchen von Unten nach Oben: Suchen von UNTEN nach OBEN