Textdatei auslesen und speichern

awortmeier

Erfahrenes Mitglied
Hallo,
ich komm einfach nicht drauf.
Ich möchte eine Textdatei ab der dritten Zeile auslesen und in einem 2 Dimensionalen String Array speichern.
Das Problem mit der dritten Zeile könnte ich, unschön, lösen.

Mein Code bisher:
Java:
	public String[][] getTableShowData(){
		BufferedReader reader;
		String zeile = null;
		String[][] data = null;

		try{
			reader = new BufferedReader(new FileReader("data.txt"));
			zeile = reader.readLine();
			while(zeile != null){
				data = zeile.split(";");
				zeile = reader.readLine();
			}
 
        }catch(IOException e){
            System.err.println("Data_Reader_Error: " + e);
        }
        
        return data;
	}

Meine Textdatei sieht so aus:
Code:
ID;Abfahrtsort;Fahrziel;Datum;Uhrzeit;Sitzplatze;Kostenbeitrag;Raucher;Telefonnummer
------------------------------------------------------------------------------------------------------------------------------------
1;Wilhelmshaven (Bahnhof);Lambrecht;21.12.2010;11:00;3;20;Nein;017164327062
2;Wilhelmshaven (FH);Santhofen;22.12.2010;12:00;2;25;Ja;01616871232
3;Wilhelmshaven (Böll);Berlin;23.12.2010;13:00;1;30;Nein;013123123123
4;Wilhelmshaven (Stadttheater);Dresen;24.12.2010;14:00;7;35;Ja;81231031313312

Vielen Dank im Vorraus für die Hilfe.
 
Hallo awortmeier,

warum (und was genau) willst du denn in deinem 2dimensionalen Array speichern? Bist du darüber im Bilde das ein String immutable ist?
 
Hallo z-mom,

ich hatte mir folgendes überlegt:
Code:
data = { { "1", "Wilhelmshaven (Bahnhof)", "Lambrecht", "21.12.2010", "11:00", "3", "20", "Nein", "017164327062" }, {.....}....}

Ja, dessen bin ich mir bewusst.
Falls dir eine elegantere Möglichkeit einfällt die Textdatei an einem JTable zu übergeben, wäre auch cool :)
 
Es ist sicherlich Geschmackssache, aber ich persönlich würde mir ein Eindimensionales Array von einem eigenen Datentyp (z.B. "Buchung") bauen, welcher die Eigenschaften enthält. Meiner Meinung nach ist es auf diese Weise leichter Fehlerhandling, spezielle Funktionen (z.B. Handling mit Datum/Uhrzeit) etc. zu implementieren, falls das irgendwann gebraucht werden sollte. (A)
Aber zu deinem Problem...
Was ich in deinem Code sehe ist folgendes:
data ist bei dir 2-dimensional, dem wird aber ein 1-dimensionaler Rückgabewert von split() zugewiesen. Du bräuchtest also auf jeden Fall einen Index, den du dann in Form von data[i] verwenden kannst. Diesen kannst du dann auch auf deine Zeilennummer abfragen... (B)

Also Variante A:
Java:
Verbindung[] data = null;
data[i] = new Verbindung(zeile.split(";")); //mit entsprechendem Konstruktur in der Klasse Verbindung
i++;
Oder Variante B:
Java:
data[i] = zeile.split(";");
i++;
 
Hallo,
habe es so gelöst.

Java:
	public String[][] getTableShowData(){
		BufferedReader reader;
		String zeile = null;
		String[] buffer = new String[9];
		String[][] data = new String[2000][9];
		int i = 0;

		try{
			reader = new BufferedReader(new FileReader("data.txt"));
			zeile = reader.readLine();
			while(zeile != null){
				if((zeile.substring(0, 1).equals("I")) || (zeile.substring(0, 1).equals("-"))){
					System.out.println("ha");
				}else{
					buffer = zeile.split(";");
					for(int t=0;t<buffer.length;t++){
						data[i][t] = buffer[t];
					}
					++i;
				}
				zeile = reader.readLine();
			}
 
        }catch(IOException e){
            System.err.println("Data_Reader_Error: " + e);
        }
        
        return data;
	}

Vermutlich nicht die eleganteste, aber sie funktioniert. Bin nartürlich für Verbesserungsvorschläge immer offen.
 
Vor der while koenntest du nen Zeilencounter machen und diesen bei jedem Durchlauf hochzaehlen. Und sobald dein counter >=3 ist, wird alles gespeichert in dein Array. Dann bist du nicht abhaenig von dem Inhalt der ersten 2 Zeilen.
 

Neue Beiträge

Zurück