if-else-endif in Textfile erkenne

Status
Nicht offen für weitere Antworten.

magic_halli

Bekanntes Mitglied
Hi,

ich melde mich nochmal bezüglich if-els-endif in einem Textfile erkenne...
Ich habe ein Textfile, welches ich zeilenweise durchlaufe. Hierbei will ich die darin enthaltenen if-(else)-endif Strukturen erkennen. Diese will ich dann in ein neues Textfile schreiben, aber es soll dabei z.B. der Inhalt vom Else-Zweig nicht mit zurückgeschrieben werden, wenn die If-Bedingung TRUE ist! Das Prüfen der if-Bedingung ist hier nicht von Bedeutung - das klappt bereits.
Ich grübel nun schon ewig über einem geeigneten Algorithmus - aber bisher wollte nichts zu 100% klappen. Könnt ihr mich nicht dabei helfen, einen Lösungsansatz zu finden?!
Das Textfile kann z.B. so aussehen (Ich habe hier per Hand die if-else-endif eingerückt, der Übersicht halber. Normalerweise steht alles untereinander)
Code:
IF <Bedingung>
   textzeile1
   if <Bedingung>
      textzeile2
      if <Bedingung>
         textzeile3
      endif
   else
      textzeile4
   endif
   textzeile5
ELSE
   textzeile6
   if <Bedingung>
      textzeile7
   else
      textzeile8
   endif
   textzeile9
ENDIF

Hier mal mein bisheriger Code (zum 1000sten mal geändert, aber leider trotzdem nicht korrekt; vielleicht ist´s als Ansatz zu gebrauchen?):
Code:
boolean ifcheck;
BufferedReader buff = new BufferedReader(new FileReader(path + "if-else-endif.txt"));
//jede Zeile durchgehen
while ( (line = buff.readLine()) != null) {
   if( line.startsWith("IF") | line.startsWith("if") ){
      ...
      //analysiert IF-Bedingung und liefert TRUE bzw. FALSE zurück - das funktioniert
      ifcheck = berechnenIf(<meine Parameter>);
      //IF gefunden
      if( ifcheck == true){
         ifcheck = true;
      }else if(ifcheck == false){
         ifcheck = false;
      }
      strBuffer.append(line + "\n");
   //ELSE gefunden
   else if( line.startsWith("ELSE") | line.startsWith("else") ){
      if(ifcheck == true && ifcounter>elsecounter){
         ifcheck = false;
      }else if(ifcheck == false){
         ifcheck = true;
      }
      strBuffer.append(line + "\n");
   }
   //ENDIF gefunden
   else if( line.startsWith("ENDIF") | line.startsWith("endif") ){
      strBuffer.append(line + "\n");
   }
   //hier jetzt alle Zeilen in den Buffer; nicht erfüllte If- oder Else-Zweige sollen ausgelassen werden
   else if(ifcheck == true){
      strBuffer.append(line + "\n");
   }

}
//schreibt Zeilen in neues Textfile 
BufferedWriter buff2 = new BufferedWriter(new FileWriter(path + "final.txt"));
buff2.write(strBuffer.toString());
buff2.close();
Ich vermute mal ganz stark, dass meine Zuweisungen (true/false) zur Variable ifcheck nicht recht stimmen?! Mir fällt jetzt aber auch kein anderer Ansatz ein. :(
Wie könnte ich sonst noch vorgehen, um das zu lösen bzw. das vorhandene ergänzen?

Vielen Dank und Gruß.
 

magic_halli

Bekanntes Mitglied
So, mal ganz einfach gefragt... Ich habe ein Textfile mit darin enthaltenen if-Anweisungen (auch verschachtelt möglich), z.B:
Code:
IF <Bedingung>
   textzeile1
   if <Bedingung>
      textzeile2
      if <Bedingung>
         textzeile3
      endif
   else
      textzeile4
   endif
   textzeile5
ELSE
   textzeile6
   if <Bedingung>
      textzeile7
   else
      textzeile8
   endif
   textzeile9
ENDIF
Mein Problem ist, wie kann ich erkennen, welches ENDIF zu welchem IF gehört und welches ELSE, wenn vorhanden, zu welchem IF/ENDIF gehört.
Mir fehlt hierfür ganz einfach ein Lösungsansatz, wie man das ermitteln kann - selbst in Worten gesprochen komme ich irgendwie nicht drauf! :cry:
Kann mir bitte jemand helfen?!?! Ich will gar nicht mal Code haben, nein... ich brauche nur paar Ideen bzw. Tips, wie ich ermitteln kann, welche IF/ELSE/ENDIF zusammengehören, um das dann programmiertechnisch umzusetzen!

Danke und Gruß.
 

magic_halli

Bekanntes Mitglied
Ja richtig... jetzt erinnere ich mich wieder an den Thread :roll:
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.

Das habe ich auch versucht umzusetzen, aber irgendwie hat´s gar nicht funktionieren wollen. :cry:
...Aber was speichere ich dann ab - die Zeilennummern der gefundenen und zusammengehörigen IF/ELSE/ENDIF?!? Ich will im Endeffekt die Zeilen zwischen den zusammengehörigen Blöcken bearbeiten, je nachdem ob IF true oder false ist!
 

VuuRWerK

Aktives Mitglied
Du speicherst erstmal nur die "Ebenentiefe", d.h. ein "IF" gefunden incrementierst Du Deine Zählvariable um 1. Für Dich bzw das Programm heist es nun es muss entweder ein "ELIF", "ELSE" oder "ENDIF" kommen. Dazwischen befinden sich Deine Anweisungen die zu erledigen sind und auch erledigt werden wenn der Ausdruck im "IF" auch true ergibt, ansonsten aknnst Du die Anweisung gleich wieder verlassen, sollte es kein "ELIF" oder "ELSE" geben. Nach gefundenem "ENDIF" kannst Du Deine Zählvariable wieder eins zurücksetzen.
Genauso machst Du weiter wenn Du in der Anweisung eines gefundenen, wahren, "IF" ein weiteres "IF" finden solltest.
Solltest Du kein "ENDIF" nach einem "IF" finden wird vermutlich ein Fehler in den Anweisungen sein.

Ich würde ja gerne mal ein wenig Beispielcode liefern, da mich ein solches Thema selber sehr interessiert, aber ich bin im moment auf Arbeit da hab ich erstmal anderss zu tun. Daher versuch es halt erstmal selber soweit wie Du kommst, vllt schaff ich es ja noch mal schnell was zusammenzuhacken.

Gut Schuß
VuuRWerK ;)
 

magic_halli

Bekanntes Mitglied
Daher versuch es halt erstmal selber soweit wie Du kommst, vllt schaff ich es ja noch mal schnell was zusammenzuhacken.
Ich versuche es auf jeden Fall... aber ich wäre Dir sicher nicht böse, wenn Du es schaffen würdest, mal "schnell was zusammenzuhacken"! :wink:

Gruß
 

magic_halli

Bekanntes Mitglied
Mh, also egal was ich jetzt bereits ausprobiert habe, ich komme einfach nicht klar. Ich weiß einfach nicht wie ich es umsetzen kann, um zu erkennen, welches ELSE/ENDIF zu welchem IF gehört.
Das ganze ist doch das sog. "dangling else" Problem, wenn ich mich nicht irre?! Das Problem beschöftigt sich damit, zu welchem if das folgende else gehört.
Leider wird das im Netz zwar viel besprochen, dass es ein Problem darstellt, dies zu erkennen, aber nirgends finde ich Quelltext zum Nachvollziehen einer Lösung des Problems! :cry:
Hat jemand zu dem Problem vielleicht einen Lösungsalgorithmus (irgendwo aus´m Netz) oder sonstwas nützliches?

Gruß.
 

magic_halli

Bekanntes Mitglied
So, ich habe es endlich gelöst, wie man aus einem myTextfile.txt, z.B.:
Code:
IF 1==9
textzeile1
if 8==8
textzeile2
if 3<7
textzeile3
endif
else
textzeile4
endif
textzeile5
ELSE
textzeile6
if 4<6
textzeile7
else
textzeile8
endif
textzeile9
ENDIF
die zusammengehörigen IF-ELSE-ENDIF Beziehungen korrekt auswertet und nur die dadurch relevanten Zeilen weiter verarbeitet (in meinem Fall in ein neues Textfile speichern).
Hier mein endgültiger Code:
Code:
boolean ifcheck = true;
Stack stack = new Stack();
stack.push( new Boolean(true) );
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 der IF-Bedingung: Funktion liefert TRUE oder FALSE zurück
      ifcheck = berechnenIf(line);
         //wenn IF-Bedingung true zurückliefert, dann...
         if( stack.peek().equals(Boolean.TRUE) ){
            stack.push( Boolean.valueOf(stack.peek().equals(Boolean.TRUE) && ifcheck) );
         }else{
             stack.push( Boolean.FALSE );
         }

   } else if( line.startsWith("ELSE") || line.startsWith("else") ){
         //bei ELSE Stack negieren           
         boolean b = stack.pop().equals(Boolean.TRUE);
         stack.push( Boolean.valueOf(stack.peek().equals(Boolean.TRUE) && !b) );

   } else if( line.startsWith("ENDIF") || line.startsWith("endif") ){
         //Wert vom Stack löschen
         stack.pop();
   }

      //Auswahl der relevanten Zeilen
   else if( stack.peek().equals(Boolean.TRUE) ){
         //Zeilen speichern
         strBuffer.append(line + "\n");
   } 
}//while close

//Stack vorsichtshalber clearen
stack.clear();
        	
//löscht evtl. exist. Textfile, bevor es neu gefüllt wird
File f = new File("/home/hallbauer/workspace/TestContainer/" + "myTextfile_NEU.txt");
if(f.exists()){
   f.delete();
}
//schreibt verändertes Orginalfile in neues Beziehungsfile (für import verwendet) 
BufferedWriter buff2 = new BufferedWriter(new FileWriter("/home/hallbauer/workspace/TestContainer/" + "if_else_endif_NEU.txt"));
buff2.write(strBuffer.toString());
buff2.close();

So funktioniert die ganze Sache endlich!

Gruß
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M If-Else Java Basics - Anfänger-Themen 5
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
laxla123 Verschachtelte If-Else Schleife Java Basics - Anfänger-Themen 21
laxla123 If-else Java Java Basics - Anfänger-Themen 4
luggas89 If else auch mit unterschiedlichen Antworten Java Basics - Anfänger-Themen 5
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
pumpgun99 Fehler Meldung "else without if" Java Basics - Anfänger-Themen 3
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Übung Else if Java Basics - Anfänger-Themen 2
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
L If und else bei 2 Dimensionalen Arrays Java Basics - Anfänger-Themen 8
F if else if anfängerfrage Java Basics - Anfänger-Themen 22
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
T "Einkauf" & if else Struktur Java Basics - Anfänger-Themen 7
steven789hjk543 Input mit if-else Java Basics - Anfänger-Themen 23
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
A break; mit Einfluss hinter else if Block Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
F Methoden Verschachtelte if else Methode Java Basics - Anfänger-Themen 10
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
C Variablen 'else' without 'if' Java Basics - Anfänger-Themen 4
F If - Else Java Basics - Anfänger-Themen 3
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
I if/else Statements Java Anfänger Java Basics - Anfänger-Themen 14
M jOptionPane mit if else Java Basics - Anfänger-Themen 16
K Frage zu If & else if Java Basics - Anfänger-Themen 5
R else if anweisungen Java Basics - Anfänger-Themen 2
Y Problem mit If-Else Verzweigung! Java Basics - Anfänger-Themen 9
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
Hijo2006 If-else Java Basics - Anfänger-Themen 6
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
T If/ Else If (zurückkehren) Java Basics - Anfänger-Themen 4
O Grosse If / Else verschachtelung übersichlitcher gestlten Java Basics - Anfänger-Themen 6
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
M If in einem else Java Basics - Anfänger-Themen 14
A boolean Methode ohne If und else Java Basics - Anfänger-Themen 1
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
C else in if umschreiben Java Basics - Anfänger-Themen 2
J Fehlermeldung else without if Java Basics - Anfänger-Themen 5
P Compiler-Fehler wieso zeigt der compiler ein else without if? Java Basics - Anfänger-Themen 3
E If...else... Java Basics - Anfänger-Themen 7
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
C If Else Frage Java Basics - Anfänger-Themen 2
M if, else Anweisung Java Basics - Anfänger-Themen 3
J Ergebnis wird gespammt sowie eine else if Frage Java Basics - Anfänger-Themen 2
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
O if and else geht nur manchmal Java Basics - Anfänger-Themen 17
V Operatoren Java if-else argument Java Basics - Anfänger-Themen 4
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
P [ANFÄNGER] if else funktioniert nicht Java Basics - Anfänger-Themen 4
T If, else Problem Java Basics - Anfänger-Themen 12
C IF-Else Verknüpfungen Java Basics - Anfänger-Themen 10
Uzi21 if - else Abfrage Java Basics - Anfänger-Themen 6
T Problem im If-Else-Statement Java Basics - Anfänger-Themen 4
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
L else without if Fehler Java Basics - Anfänger-Themen 14
F try/catch - (else) Java Basics - Anfänger-Themen 11
H Worauf bezieht sich die erste else-Anweisung Java Basics - Anfänger-Themen 9
S if und else problem... Java Basics - Anfänger-Themen 13
Q if-else Logikproblem Java Basics - Anfänger-Themen 4
M Probleme mit else if Java Basics - Anfänger-Themen 15
M Erste Schritte Break-Anweisung bei if-else Java Basics - Anfänger-Themen 6
B OOP If und else in Main class einbinden Java Basics - Anfänger-Themen 9
T Erste Schritte switch case Anweisung und if else Verzweigungen? Java Basics - Anfänger-Themen 6
K Bedingungen else Java Basics - Anfänger-Themen 7
B if-else in einer schleife Java Basics - Anfänger-Themen 14
J Erste Schritte If-Else Idee gesucht Java Basics - Anfänger-Themen 6
T if else Java Basics - Anfänger-Themen 8
R boolean, if-else Java Basics - Anfänger-Themen 7
M if then else geht nicht Java Basics - Anfänger-Themen 10
P int-Wertevergleich mit if-else-Verzweigung Java Basics - Anfänger-Themen 3
P If-else-Verzweigung Java Basics - Anfänger-Themen 9
E Compiler-Fehler Fehler: else without if Java Basics - Anfänger-Themen 11
D Java Einsteiger (boolean, if-else etc.) Java Basics - Anfänger-Themen 7
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
P Anzahl der else if Operatoren begrenzt?? Java Basics - Anfänger-Themen 7
K Mal wieder ein Problem mit If / Else Java Basics - Anfänger-Themen 10
K Anfänger If / Else Problem Java Basics - Anfänger-Themen 5
C if else Abfrage Java Basics - Anfänger-Themen 11
T Umschreiben von switch in if else und umgekehrt Java Basics - Anfänger-Themen 9
C Schleifen, if, else......? Java Basics - Anfänger-Themen 8
2 if und else Java Basics - Anfänger-Themen 9
L If/else nicht korrekt ausgeführt. Java Basics - Anfänger-Themen 22
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
S Brauche Hilfe bei if/else Java Basics - Anfänger-Themen 3
S if-else Java Basics - Anfänger-Themen 22
A ein if else problem Java Basics - Anfänger-Themen 13
N If-else-If Leiter Java Basics - Anfänger-Themen 9
U Dringend: Syntax error on token "else" Java Basics - Anfänger-Themen 8
L if else anweisung Java Basics - Anfänger-Themen 2
M If/Else mit Zahlenfolge Java Basics - Anfänger-Themen 13
B Problem mit Variable und if/else Java Basics - Anfänger-Themen 6
H alternativen zu if .. else .. Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben