# An den Anfang einer While-Schleife springen



## roddy (25. Okt 2005)

Ich habe ein Problem im Auslesen einer Datei. Ich benutze den Stream-Tokenizer und eine While-Schleife. Im Groben funktioniert das so, dass jede Iteration der Schleife eine gelesene Zeile repräsentiert. Klappt auch alles wunderbar, aber jetzt kommt mein Problem: 

Ich möchte fehlerhafte Zeile behandeln, indem ich eine Fehlermeldung ausgebe und die Zeile nicht einlese.


```
while (!EOF){
if (ttype==TT_NUMBER){ //also ist die Zeile von der Art so und so
bla = tok.sval;
nextToken();
if (tok.ttype!=TT_EOL){ // Wenn jetzt schon ein End Of Line vorliegt, besteht ein Eingabefehler, genau den möchte ich behandeln...
blub = tok.sval;}
else {
System.out.println("BLABLA FEHLER");
X(); // für dieses X hätte ich gerne einen Befehl, der an den Anfang der While-Schleife zurückspringt
}
// Hier werden noch weitere Tokens eingelesen, wenn (was Normalfall ist) weitere Token in dieser Zeile stehen
```

Also mein Problem ist das folgende: Meine Zeile hat das Format

#,STRING,#,#

Wenn er z.B. an zweiter Stelle (wo der String stehen sollte) feststellt, dass EOL dort steht, soll er die Zeile nicht einlesen, sondern einen Fehler ausgeben (soweit kein Problem). Da aber nach dem Einlesen vom STRING noch weitere nextToken() Befehle stehen, wird er in der nächsten Zeile (die ja durchaus wieder korrekt sein könnte) an der falschen Stelle anfangen zu lesen, da die Token-Position in Relation  zum letzten EOL nicht mehr stimmt. Deshalb würde ich gerne die Abarbeitung der weiteren Zeile der While-Schleife unterbinden. 

Fällt euch da eine andere Möglichkeit ein, als einen Boolschen Wert zu initialisieren und die Abarbeitung mit sehr vielen IF-Abfragen (ob der Wert noch true ist) zu Verschachteln? 

Bitte keine Hinweise der Art: "StreamTokenizer ist deprecated, nimm doch X oder Y", ich programmiere an dem Programm seit einer Woche und möchte nicht von Vorne anfangen ;-)
[/code]


----------



## bygones (25. Okt 2005)

hä ? wenn du in deinem else zweig einfach den fehler behandelst (ausgabe oder was auch immer) und dann gar nix macht geht er doch automatisch wieder zur Bedingungen der while schleife, testet sie und legt wieder los. Falls in der While schleife noch code kommt, den du in dem Fall überspringen willst dann geht das per 
	
	
	
	





```
continue;
```


----------



## roddy (25. Okt 2005)

Mit if-then-else ginge es auch, ja, aber da ich mehrere Tokens einlese, wäre das für meinen Geschmack etwas sehr umständlich bzw. unübersichtlich. Ich glaube continue ist genau der Befehl, den ich gesucht habe, ich teste es gleich mal ;-)

_EDIT:_ Jepp, so geht, was ich machen wollte. Danke! :toll:


----------

