zusammengehörige if-else-endif erkennen

1. Das File wird aus einem techn.Zeichenprogramm heraus generiert und ist IMMER syntaktisch korrekt in bezug auf IF-ELSE-ENDIF-Blöcke! Das ist schonmal die eine Gegebenheit.
2. Es existieren KEINE Einrückungen der Syntax. Jede Zeile beginnt am Zeilenanfang.

Ich möchte das File mit Java zeilenweise durchgehen (das funktioniert bereits) und je nachdem, ob ein IF true oder false ist und ob eventuell dazu noch ein ELSE-Zweig existiert, die dazwischenliegenden Zeilen bearbeiten.
Das ganze soll natürlich so funktionieren, dass auch verschachtelte IF´s erkannt und darauf entsprechend reagiert werden kann.

Wenn Du in einer Zeile ein "IF" findest kannst/musst Du davon ausgehen das es auch ein "ENDIF" dazu gibt. Verinfacht kannst Du erstmal eine Zählvariable nehmen und diese incrementieren. Sollte innerhalb des gefundenen "IF" wieder ein "IF" auftauchen, tust Du die Zählvariable wieder um eins hochzählen. Findest Du das erste "ENDIF" kannst/musst Du davon ausgehen das es sich hierbei um das "ENDIF" handelt welches zum 2. gefundenen "IF" gehört. Das nächste gefundene "ENDIF" gehört somit zum ersten gefundenen "IF".

Genauso kannst Du das mit einem "ELSE" oder "ELSEIF" machen.
Mh, sowas ähnliches hab ich schonmal versucht umzusetzen... kam aber nur Mist bei raus, da ich irgendwie völlig durcheinander kam.
 
Zuletzt bearbeitet:
Wie ich oben schon gesagt hab, else und endif gehören immer zum letzten "geöffneten" if.

Ich hoffe das hilft dir mal weiter.

MFG

zEriX
 
Wie ich oben schon gesagt hab, else und endif gehören immer zum letzten "geöffneten" if.
Das ist mir sprachlich völlig einleuchtend, nur programmiertechnisch bekomme ich das nicht in den Kopf... z.B.:
1. ich finde ein IF (Bedingung hierzu ist true)
2. ich finde paar Zeilen weiter wieder ein IF (Bedinung ist false)
3. ich finde ein ELSE (gehört zum false-IF) und die Zeilen danach werden bearbeitet
4. ich finde ENDIF (gehört zum false-IF)
5. ich finde ELSE (gehört zum true-IF) und alle Zeilen danach werden nicht berücksichtigt
6. ich finde ENDIF (gehört zum true-IF)
7. alle Zeilen ab hier werden einfach berücksichtigt, bis wieder ein IF kommt, dann geht die ganze Unterscheidung von neuem los

Diese Abfolge in Java umzusetzen beschäftigt mich ungemein und ich komme einfach nicht weiter. Ein Ansatz wäre erstmal, das File zeilenweise durchzugehen und jede Zeile auf IF/ELSE/ENDIF zu prüfen:
Java:
boolean ifcheck;      //Variable, ob IF-Bedingung true oder false ist
BufferedReader buff = new BufferedReader(new FileReader(path + "myTextfile.txt"));
//jede Zeile durchgehen
while ( (line = buff.readLine()) != null) {
   if( line.startsWith("IF") || line.startsWith("if") ){
      //prüfen, ob IF-Bedingung true oder false ist (funktioniert bereits!)
      ifcheck = checkIF(line);   //checkIF(line) gibt true oder false zurück
      //und nun?

   }else if( line.startsWith("ELSE") || line.startsWith("else") ){
      //was nun hier tun?
   
   }else if( line.startsWith("ENDIF") || line.startsWith("endif") ){
      //was nun hier tun?
   
   }
}
Ich hab zwar diesen Ansatz, aber ich hänge auch hier fest - ich weiß nicht recht, wie nun weiter. :confused:
 
Ich würde das nicht mit einem boolschen Wert machen. FÜhre lieber einen Index, dann bist du Variabler und ist auch einfacher zu verstehen.

Was nun hier... Was willst du denn überhaupt machen?
 
Ich möchte das File mit Java zeilenweise durchgehen (das funktioniert bereits) und je nachdem, ob ein IF true oder false ist und ob eventuell dazu noch ein ELSE-Zweig existiert, die dazwischenliegenden Zeilen bearbeiten.
Das ganze soll natürlich so funktionieren, dass auch verschachtelte IF´s erkannt und darauf entsprechend reagiert werden kann.

:rolleyes:
 
Ich würde das nicht mit einem boolschen Wert machen. FÜhre lieber einen Index, dann bist du Variabler und ist auch einfacher zu verstehen.

Was nun hier... Was willst du denn überhaupt machen?
Den boolschen Wert habe ich erstmal pauschal, je nachdem ob IF gleich true oder false ist, gesetzt.
Ich kann ja auch einen Index mitführen... Index aber für was - für jedes gefundene IF/ELSE/ENDIF einen extra counter?
Wie soll ich mit dem Index dann weiterverfahren, um zugehörige IF/ELSE/ENDIF zu erkennen?

Ich will im Endeffekt die Zeilen aus dem Textfile in ein neues Textfile speichern, sodass in dem neuen File nur noch die Zeilen drinstehen, die durch die Berücksichtigung von IF/ELSE/ENDIF übrig bleiben (mag vielleicht unsinnig erscheinen - ist aber Basis für andere Sachen)!
 
Hi.

Du müßtest dir in einem Stack die aktuellen Werte für die Bedingungen speichern, da du grundsätzlich von einem verschachtelten IF wieder ins übergeordnete IF/ELSEIF kommst und dort wissen mußt, ob die Bedingung war ist oder nicht.

Alg:

wenn Zeile == IF dann speichere Wert von Bedingung auf dem Stack.
bei ELSEIF Wert mit dem Top Stack vergleichen, falls FALSE, Wert vom Stack entfernen, neuen Wert von Bedingung drauf.
bei ELSE Wert des Stacks negieren.
bei ENDIF Wert vom Stack entfernen.

Gruß
 

Neue Beiträge

Zurück