Thread while-Schleife mit Bedingung als RegEx und Start von foreach-zeiger? (9 answers)
Opened by bandchef at 2014-08-04 14:38

clms
 2014-08-04 15:04
#176688 #176688
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2014-08-04T12:38:54 bandchef
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
foreach $fileLineZF(<ZFFILE>)
{
if(#irgendeine RegEx)
{
#mein Code
}
elsif(#irgendeine RegEx)
{
#Ich möchte hier nun mit der bisher erreichen Zeile der foreach-Schleife und einer while-schleife weitermachen.
}
}

Wie kann ich im elsif mit einer while-Schleife, welche als Bedingung eine weitere RegEx bekommt, weitermachen? Die while-Schleife soll als Startwert die nächste Zeile der vorherigen foreach-Schleife bekommen.

Warum willst Du außen unbedingt eine foreach-Schleife haben?

Die Semantik von foreach bedeutet, dass der ganze File auf einen Schlag in ein Array gelesen wird, dass dann anschließend abgearbeitet wird. (In der Praxis optimiert Perl hier AFAIK normalerweise, so dass der File doch nur zeilenweise gelesen wird)

Probiere es doch mit zwei ineinandergeschachtelten while-Schleifen
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
while (my $line = <ZFILE>) {
  if ($line =~ /.../) {
     ...;
  } elsif ($line =~ /.../) {
    while ($line = <ZFILE>) {
      ...;
    }
  }
}

Wenn Du beim ersten Durchlauf der inneren while-Schleife die Zeile verwenden willst, die Du auch beim elsif-Match verwendet hast, musst Du die innere Schleife durch do {...} while (...); ersetzen.

View full thread while-Schleife mit Bedingung als RegEx und Start von foreach-zeiger?