Java I/O Problem

kleiner_floh

Mitglied
Hallo Leute,

ich habe ein Problem. Ich soll eine Textdatei einlesen und verarbeiten. Ist natürlich eigentlich nicht so die Schwierigkeit, aber ich komme dennoch nicht weiter.

Hiermal ein paar Code Schnipsel:

Code:
	while (s.hasNextLine()) {
			str = s.nextLine();
			
			if (str.contains("0G") || str.contains("5T") || str.contains("6T")
					|| str.startsWith("   ")) {
				String clean = str;
				Scanner s2 = new Scanner(clean);
				while (s2.hasNextLine()) {
					a.println(s2.nextLine());
				}
			}
			if (str.contains("4B") && str.startsWith("   ")) {
				String clean = "." + str;
				Scanner s2 = new Scanner(clean);
				while (s2.hasNextLine()) {
					a.println(s2.nextLine());
				}
		}

Die Datei die ich einlese ist ungefähr in dem Stil:

Code:
5T N33.8*   Krankheiten der Harnblase bei sonstigen anderenorts
            klassifizierten Krankheiten
5I          Krankheit der Harnblase bei Schistosomiasis [Bilharziose]
              (B65.-+)
LZ
4T N34.-    Urethritis und urethrales Syndrom
4B          Soll der Infektionserreger angegeben werden, ist eine zusätzliche
            Schlüsselnummer (B95-B97) zu benutzen.
4E          Exkl.:   Reiter-Krankheit (M02.3-)

Problem dabei ist jetzt, das ich immer wenn eine Zeile mit einem Leerstring anfängt und auf eine Zeile die mit 4B anfängt folgt an den Anfang von dieser ein Punkt gesetzt werden soll. Wenn die Leerzeile auf z.B. 5T folgt, soll kein Punkt gesetzt werden.

Und ausserdem kann es sein, dass mehr als eine Zeile hintereinander mit einem Leerstring beginnen und diese müssen dann alle einen Punkt bekommen.

So vielleicht könnt Ihr mir tatsächlich weiterhelfen, da ich aktuell irgendwie nicht mehr weiterweiß.

Danke
Floh
 
Ich finde, du hast dich sehr wirr ausgedrückt;)
Versuchen wir es mal so:
wenn Zeile beginnt mit 4B dann soll da stehen 4B.
und wenn sie mit 5T beginnt dann soll es bei 5T bleiben?
 
Fast, wie dem Code zu entnehmen ist soll erst der . dann 4B stehen und bei 5T soll nur 5T stehen.

Entscheiden dabei ist aber, dass bei der Leerzeile nach 4B ein Punkt gesetzt werden soll.

.4b
.

als Beispiel und bei Leerzeilen nach 5T kein Punkt...
 
Dann musst du dir merken ob was du zuletzt 4B oder 5T eingelesen hast.

Sowas in der Art:
Java:
boolean has5T = str.contains("5T");

und kannst dann entsprechend den boolean auslesen und Punkt oder nicht Punkt setzen. Du musst dir einfach nur überlegen wie du das umsetzen würdest wenn du es von Hand abschreiben müsstest und genau das dann auch im Programm umsetzen.
 
Wenn ich dich also richtig verstanden habe könntest du das evtl so machen, dass du jeweils die aktuelle Zeile überprüfst womit sie beginnt.(Zum Beispiel mit regex:
Code:
if (Pattern.matches("^[ 4B]", zeile))
oder
Code:
zeile.replaceAll("^[ 4B]", [.4B])
)
Es gibt dazu viele Möglichkeiten, durchsuch einfach mal das Forum
 
Da sag ich einfach schonmal danke, sind gute Ansätze...irgenwie fehlt mir heute der Sinn fürs Java, sollte vielleicht mal eine Pause machen, so schwer ist die Aufgabe ja eigentlich nicht...
 
Zurück