Bestimmten Textblock aus Datei auslesen

Maddili

Mitglied
Nicht gleich schimpfen, aber ich hab gegoogelt und im Forum gesucht, aber nichts passendes gefunden.

Folgendes:

Ich habe eine Textdatei, in der ich einen bestimmten Text-Baustein auslesen will. Sieht so aus:

;-------------------------
;_____Muh //Die __ sind Leerzeichen
;-------------------------
Muh macht die Kuh!
Die Kuh macht Muh!
;-------------------------
;___Ende Muh
;-------------------------

Ich habe mir das jetzt folgendermaßen gedacht:

Java:
FileInputStream inputstream=new FileInputStream(DateiChooser.uebergabe);
InputStreamReader reader=new InputStreamReader(inputstream);
BufferedReader bff=new BufferedReader(reader);
String line = bff.readLine();

while line != null{
 	String vergleich = bff.readLine();
	if(vergleich.contains(";") && vergleich.contains("Muh")){

		// So, und jetzt will ich aber nicht nur diese Zeile auslesen: ;_____Muh,
		// sondern AB der Zeile zuvor  (;-------------------------)
		// bis zur letzten Zeile des Textblocks: (;-------------------------) 
		// (nach der  ;___Ende Muh  Zeile
		// Und das ganze soll am besten in einen String, Vector, Arraylist oder sonstiges.
		

}


Kann mir jemand helfen?

mfg Maddin
 
Hallo,

Du könntest doch gleich die gesamte Textdatei (also den kompletten Inhalt) als String auslesen und diesen dann mit dem StringTokenizer passend zerlegen.

Hoffe, ich hab das richtig verstanden...

Gruß,
Martin
 
Hört die Schleife überhaupt jemals auf?
Auf line steht immer die erste Zeile, und die neuen Zeilen schreibst du dann ja auf vergleich. Und line wird nie geupdatet, also steht steht da immer nur das selbe drauf.
Das auch gleich mal als Antwort, warum die erste Zeile nicht gelesen wird^^

Also du hast da dieses File, und daraus willst du nur einen Block auslesen. Dann würd ich das so, oder so ähnlich machen:

Java:
FileInputStream inputstream=new FileInputStream(DateiChooser.uebergabe);
InputStreamReader reader=new InputStreamReader(inputstream);
BufferedReader bff=new BufferedReader(reader);
String line = "";
String matchText = "Muh"; //Der Text nachdem gesucht wird
String textFound = "";

while((line = bff.readLine())!=null)
{
if(line.contains(mathText)
textFound = matchText;
}

if(textFound != null)
System.out.println("Text gefunden: " + textFound);
else
System.out.println("Text wurde nicht gefunden!");

bff.close();
 
Moin zusammen!

Hört die Schleife überhaupt jemals auf?
Auf line steht immer die erste Zeile, und die neuen Zeilen schreibst du dann ja auf vergleich. Und line wird nie geupdatet, also steht steht da immer nur das selbe drauf.
Das auch gleich mal als Antwort, warum die erste Zeile nicht gelesen wird^^

Aaahh, jetzt weiß ich wo die NullPointerException herkam - Danke! ;)

Das eigentliche Problem konnte ich aber bisher noch nicht lösen.

Nur mal so ein Gedanke: Wie wäre es mit einem Counter?
Also im Pseudo-Code etwa so:

// Bla bla bla BufferedReader usw.

int muhcount=0;

if(vergleich.startswith(";_____Muh ")){
do while(!vergleich.startswith(";___Ende Muh")){
muhcount++;
}

String temptext= readline(muhcount=1) bis (muhcount.größteZahl - 1)


Dann hätte ich den Textblock zwischen den ;----------------------------,
also:

Muh macht die Kuh!
Die Kuh macht Muh!

String textblock = ";-------------------------\n;_____Muh \n;-------------------------\n" + temptext + ";-------------------------\n;___Ende Muh\n;-------------------------"


Versteht ihr, was ich meine? Ist selbst für mich ein wenig verwirrend. Tja....Montag Morgen eben..

mfg Maddin
 
Was fürn Bogus, und Java-(Pseudo-)Code ist das auch nicht

Java:
boolean save = false;
while((line = readline()) != null) {
    if(line.startsWith("__Start"))
        save = true;
    if(save) result += line;
    if(line.startsWith("__End")) break;
}
close();

So ungefär gehst du da ran.
 
Zurück