gleichanfangende Zeilen solange auslesen bis es die gibt

plammy

Bekanntes Mitglied
Hallo 🙂
Ich versuche grade aus einer txt datei daten auszulesen... Klappt auch super.. .Nur folgendes stört mich noch..Ich hab ne methode geschrieben was er mit bestimmte Daten machen soll wenn die Zeile mit "bGray" anfägt... und das soll er Bufferedreader für jede Zeile die mit bGray anfägt auch tun... es folgen immer mehrere Zeilen mit bGray am Anfang.. Nur das problem ist das er nur die eine liest und bei der nächste nicht mehr... Ich habs mit while schleife versucht aber dann gerät das programm in einer endlosschleife 🙁


Java:
                        line = br.readLine();   
                        if(line.startsWith("tile3"))
                        { 
                            System.out.println("tile3W: " + line.substring(6,10));   
                            create.textfieldsFourDigits.get(10).setText(line.substring(6,10).replace("_", ""));           
                            System.out.println("tile3H: " + line.substring(11));
                            create.textfieldsFourDigits.get(11).setText(line.substring(11).replace("_", ""));   
                        }
                        line = br.readLine();    
                            while(line.startsWith("bGray")){
                                 
                                String bausteinWidthStr = line.substring(6,10).replace("_", "");
                                System.out.println("BausteinW: " + bausteinWidthStr);   
                                create.textfieldsFourDigits.get(12).setText(bausteinWidthStr);                           

                            }
                        line = br.readLine();    
                            while(line.startsWith("bOrange")){          
                                String umbruch = System.getProperty("line.separator");
                               //"BausteinOrangeW:
                                create.textfieldsFourDigits.get(14).setText(line.substring(8,12).replace("_", ""));                           
                                              
                                //BausteinOrangeH: 
                                create.textfieldsFourDigits.get(15).setText(line.substring(13,17).replace("_", ""));       
}
 
Java:
                while((line = br.readLine()) != null){   
                        if(line.startsWith("tile3"))
                        { 
                            System.out.println("tile3W: " + line.substring(6,10));   
                            create.textfieldsFourDigits.get(10).setText(line.substring(6,10).replace("_", ""));           
                            System.out.println("tile3H: " + line.substring(11));
                            create.textfieldsFourDigits.get(11).setText(line.substring(11).replace("_", ""));   
                        }
                       
                       if (line.startsWith("bGray")){
                                 
                                String bausteinWidthStr = line.substring(6,10).replace("_", "");
                                System.out.println("BausteinW: " + bausteinWidthStr);   
                                create.textfieldsFourDigits.get(12).setText(bausteinWidthStr);                           
 
                            }
                       if (line.startsWith("bOrange")){          
                                String umbruch = System.getProperty("line.separator");
                               //"BausteinOrangeW:
                                create.textfieldsFourDigits.get(14).setText(line.substring(8,12).replace("_", ""));                           
                                              
                                //BausteinOrangeH: 
                                create.textfieldsFourDigits.get(15).setText(line.substring(13,17).replace("_", ""));       

            }
}
 
das wird doch ne Endlosschleife oder stehe ich gerade auf dem Schlauch 😀
du änderst Line ja nie


[EDIT]das war an den TE 😀
okay sehe gerade ^^ hat der TE ja selber geschrieben 😀 [/EDIT]
 
Zuletzt bearbeitet:
@plammy
der Vorgang ist für dich nicht mit dem Kopf zu durchdenken?

ans Ende der Schleife, Zeile 15 in deinem Code, gehört ein
> line = br.readLine();
damit beim nächsten Schleifendurchlauf die neue Zeile geprüft wird,

Zeile 17 dagegen muss vielleicht weg, falls eine Zeile, die nicht mehr mit 'bGray' beginnt, direkt mit 'bOrange' beginnen könnte
und in der nächsten Schleife geprüft werden soll

beim einzelnen if am Anfang genauso, Zeile 9 fraglich, in das if gehört aber vielleicht die Zeile,
immer die Vorstellung: wenn ein if oder while eine Zeile konsumiert, genau dann auch eine neue laden,
wenn nicht dann bleibt diese Zeile bestehen, nicht auslassen durch generell nächste Zeile, es sei denn du hast Gründe dafür

edit: die generelle Schleife von TR ist noch besser
 
Zuletzt bearbeitet von einem Moderator:
imho solltest du in dem ganzen Konstrukt nur 1x
Code:
line = br.readLine();
stehen haben...wenn ich mich nicht komplett irre, liefert diese Methode einen String zurück und zeigt dann auf die nächste Zeile deiner Datei. => du liest die erste Zeile ein, wenn diese mit "tile3" beginnt, machst du irgendwas...wenn nicht, liest du die nächste Zeile ein...wenn diese mit
Code:
bGray
beginnt, machst du was anderes und wenn du dann das 3x
Code:
line = br.readLine();
auf
Code:
line.startsWith("bOrange")){
prüfst, sollte die while-Schleife nur funktionieren, wenn sich in der 3. Zeile "bOrgange" befindet...

der grundsätzliche Aufbau sollte so oder ähnlich sein:
Java:
	BufferedReader br = new BufferedReader(new FileReader(new File(
				"WasAuchImmer.TXT")));
		String line;
		while ((line = br.readLine()) != null) {
			if (line.startsWith("tile3")) {
				System.out.println("tile3W: " + line.substring(6, 10));
				create.textfieldsFourDigits.get(10).setText(
						line.substring(6, 10).replace("_", ""));
				System.out.println("tile3H: " + line.substring(11));
				create.textfieldsFourDigits.get(11).setText(
						line.substring(11).replace("_", ""));
			} else if (line.startsWith("bGray")) {

				String bausteinWidthStr = line.substring(6, 10)
						.replace("_", "");
				System.out.println("BausteinW: " + bausteinWidthStr);
				create.textfieldsFourDigits.get(12).setText(bausteinWidthStr);

			} else if (line.startsWith("bOrange")) {
				String umbruch = System.getProperty("line.separator");
				// "BausteinOrangeW:
				create.textfieldsFourDigits.get(14).setText(
						line.substring(8, 12).replace("_", ""));

				// BausteinOrangeH:
				create.textfieldsFourDigits.get(15).setText(
						line.substring(13, 17).replace("_", ""));
			}
		}

[edit]wer zu spät kommt, den bestraft das Leben.. 🙁 meine Güte bin ich alt und langsam[/edit]
 
@TR: ja eben nicht... so lies die zeilen, die mit gGray anfangen und nimmt die daten letzendlich nur aus der letze 🙁.. der rest geht verloren
 
was soll den passieren bei deinem code?
[JAVA=14] create.textfieldsFourDigits.get(12).setText(bausteinWidthStr);[/code]

Natürlich steht nachher der text aus der letzten Zeile die mit mit
Code:
bGray
anfängt dort. so hast du es ja programmiert, wenn auch evtl nicht gewollt/unbewusst 🙂

Also was willst du erreichen ?
 
Zuletzt bearbeitet:
wo ist der unterschied zwischen dem code, ausser dass der von jgh von der formatierung schöner/anders ist? ???:L
 
beim
Code:
else if
gebe ich dir recht, ist aber nur in der performance ein unterschied, der rest ich gleich. ein
Code:
br.readLine()
ist bei mir auch nur einmal drin. also hast du nicht genug code bei dir gelöscht gehabt und darum hat es nicht funktioniert.
 

Neue Themen


Zurück
Oben