Datei auslesen und in 2dim Array packen.

Z

Zero_day

Gast
Hallo :)

Ich habe ein kleines Problem mit meiner Funktion, sitze schon ewig dran, komme aber einfach nicht weiter...

Also im Prinzip sieht das ganze so aus
Java:
		String[][] entries = new String[][] {
				{"5555", "Max", "Mustermann"},
				{"6666", "Martina", "Musterfrau"},
				{"a", "b", "c"}
		};
		System.out.println(Arrays.toString(entries[0]));
	}
Mit dem System.out wird mir ja jetzt {"5555", "Max", "Mustermann"} ausgegeben.
Nur möchte ich jetzt diese Werte aus einer Datei auslesen.

Mein Ansatz:
Java:
	BufferedReader br = null;

		br = new BufferedReader(new FileReader(csvFile));
		String currentline = null;
//Grund für die currentline = br.readLine(); : Oben in der Datei Steht ein Header, dann freie Zeile, //dann erst die Einträge
		currentline = br.readLine();
		currentline = br.readLine();

		String[] currentline_array = null;

		String[][] entries1 = null;

		while ((currentline = br.readLine()) != null) {

 //lineToRecord wandelt einen String in ein Kommagetrenntes Array um.

			currentline_array = lineToRecord(currentline);
			entries1 = new String[][] { { currentline_array[0],
					currentline_array[1], currentline_array[2] } };

		}
		System.out.println(Arrays.toString(entries1[0]));
Leider gibt er mir hier nur den Letzten eintrag aus, da sich entries1 wohl immer selbst überschreibt, bis zum letzten Schleifendurchlauf. Jemand vielleicht eine Idee? Bin für jeden Rat dankbar.
 
Z

zero_day

Gast
achso und von entries[] gibt es leider auch nur den 0ten index. Eigentlich sollten das ja so viele sein wie Einträge da sind. Weiß grade einfach nicht weiter :(
 

Camill

Bekanntes Mitglied
Java:
entries1 = new String[][] { { currentline_array[0], currentline_array[1], currentline_array[2] } };

Da liegt dein Fehler, du erstellst in jedem Durchlauf ein neues Array.
 
Z

zero_day

Gast
Danke für die Antwort :)
Aber wie kann ich denn die Werte aus der Schleife in das Array packen ohne es in der Schleife aufzurufen? Denn die Werte müssen ja in der Schleife aus der Datei ausgelesen werden.
 

Camill

Bekanntes Mitglied
Das Array müsste bereits vorher vollständig deklariert werden, da die Menge der Daten sicherlich zu Anfang nicht bekannt ist empfehle ich eine Liste zu verwenden, in diese können dann eindimensionale String Arrays gepackt werden.
 
Z

zero_day

Gast
Doch die größe ist Bekannt. Diese methode liest ja alle einträge aus und ich habe auch eine methode die alle einträge zählt. (Es gibt nur 3 Spalten, ID, Vorname und Nachname)

Es ist eine Hausaufgabe und leider sind wir noch nicht bei Listen^^'
Die Methode muss aber lt Spezifikation ein 2 Dimensionales Array zurückgeben.

Leider hab ich auch noch nicht so ganz verstanden wie ich die Variable vorher deklarieren kann, damit die Werte aus der Schleife reinkommen... Wäre nett wenn Sie mir da noch einen Tipp geben könnten ;)
 

jgh

Top Contributor
wenn du weißt, dass es 512 Datensätze mit jeweils 3 Daten gibt, dann qnd bspw so...

Java:
int x = 0;
		String[][] entries1 = new String[512][3];

		while ((currentline = br.readLine()) != null) {

			// lineToRecord wandelt einen String in ein Kommagetrenntes Array
			// um.

			currentline_array = lineToRecord(currentline);
			entries1[x] = new String[] { currentline_array[0],
					currentline_array[1], currentline_array[2] };
			x++;
 

Camill

Bekanntes Mitglied
Oder mithilfe einer for-Schleife, ist natürlich nur Geschmackssache:
Java:
String[][] entries1 = new String[ROWS][COLS];
for (int i = 0; (currentline = br.readLine()) != null; i++) {
	entries1[i] = lineToRecord(currentline);
}
 
Z

zero_day

Gast
Hallo, ich bin leider erneut auf ein Problem gestoßen das ich alleine nicht gelöst bekomme :(
Also diesmal soll wieder ein 2Dimensionales Array zurückgegeben werden allerdings nur aus einer bestimmten Spalte, auf die ein gegebener String passt.

Ein Beispiel:
Meine .txt Datei sieht so aus:
a,a,a
a,a,b
a,b,c

Man ruft die Funktion mit get(col,value); auf. (col=column und value soll ein String sein)
bei get(1,"b") sollte dann also [a, b, c] zurückgegeben werden.
Bei meinem Code funktioniert das schon nur das er bei mir ausgibt:
[null, null, null]
[null, null, null]
[a, b, c]

Hoffe ihr könnt mir nochmal Weiterhelfen wäre sehr dankbar :)
Hier mein Ansatz zur Lösung:
Java:
		br = new BufferedReader(new FileReader(csvFile));
		String currentline = null;
		currentline = br.readLine();
		currentline = br.readLine();
		// weg

		String[] currentline_array = null;

		int x = 0;
		String[][] entries1 = new String[3][3];
		String[][] entries2 = new String[3][3];

		while ((currentline = br.readLine()) != null) {
			//lineToRecord wandelt einen String in ein Array
			currentline_array = lineToRecord(currentline);
			
			entries1[x] = new String[] { currentline_array[0],
					currentline_array[1], currentline_array[2] };
			
			x++;
		
		}
		for (int y = 0; y < 3; y++) {
			
			if (entries1[y][col].equals(value))
				entries2[y]=entries1[y];
		
			//Das Syso hier nur zum testen
		System.out.println(Arrays.toString(entries2[y]));
			
		}
		
		if (br != null)
			br.close();
	
		return entries2;
	}
 

Camill

Bekanntes Mitglied
[java=26]
if (entries1[y][col].equals(value))
entries2[y]=entries1[y];
[/code]
Wenn ich die Aufgabe richtig verstanden habe liegt in den oben genannten Zeilen der Fehler. Sofern [c]value = "b"[/c] wird lediglich die 3.Zeile(index 2) des Arrays [c]entries2[/c] gefüllt, Zeile 1 und 2(index 0 und 1) sind somit 'null'.
Ein weiterer Zähler für [c]entries2[/c] wäre hilfreich, sodass mit dem "befüllen" der 1.Zeile begonnen werden kann.
 
Zuletzt bearbeitet:
Z

zero_day

Gast
Du meinst so?
Java:
int j=0;
		for (int y = 0; y < 3; y++) {
			
			if (entries1[y][col].equals(value))
				entries2[j]=entries1[y];
		
			j++;
		System.out.println(Arrays.toString(entries2[y]));
			
		}
Da kommt jetzt aber nur
[null, null, null]
[b, b, b]
[null, null, null]

raus ^^' Ich fürchte so meintest du das wohl nicht.
 

Camill

Bekanntes Mitglied
Die Zählvariable darf natürlich nur erhöht werden wenn der entsprechende Wert gefunden wird, somit sollte das [c]j++;[/c] mit die die if-Bedingung.
 
Z

zero_day

Gast
Java:
for (int y = 0; y < 3; y++) {
			
			if (entries1[y][col].equals(value)) {
				
				entries2[j]=entries1[y];
		
			j++;
			}
		System.out.println(Arrays.toString(entries2[y]));

jetzt kommt nur noch
[null, null, null]
[null, null, null]
[null, null, null]

:(
 
Z

zero_day

Gast
okay ^^ also aufruf:

Java:
	try {
			get(1,"b");}
			catch (IOException f){
				System.err.println(ERR_MSG_IO);
			}
[code=Java]

und die methode:

[code=Java]
BufferedReader br = null;

		int i = 0;
		int h = 0;
		br = new BufferedReader(new FileReader(csvFile));
		String currentline = null;
		currentline = br.readLine();
		currentline = br.readLine();
		// weg

		String[] currentline_array = null;

		int x = 0;
		String[][] entries1 = new String[3][3];
		String[][] entries2 = new String[3][3];

		while ((currentline = br.readLine()) != null) {
			
			currentline_array = lineToRecord(currentline);
			
			entries1[x] = new String[] { currentline_array[0],
					currentline_array[1], currentline_array[2] };
			
			x++;
		
		}
		int j=0;
		for (int y = 0; y < 3; y++) {
			
			if (entries1[y][col].equals(value)) {
				
				entries2[j]=entries1[y];
		
			j++;
			}
		System.out.println(Arrays.toString(entries2[y]));
			
		}
		
		if (br != null)
			br.close();
	
		return entries2;
	}

Inhalt der csv:
a,a,a
b,b,b
c,c,c
 
Z

zero_day

Gast
ahh header vergessen sry...
ncsv inhalt:

"Student ID",Firstname,Lastname

a,a,a
b,b,b
c,c,c
 

Camill

Bekanntes Mitglied
Habe den Fehler gefunden:
[JAVA=36]System.out.println(Arrays.toString(entries2[y]));[/code]
Da benutzt du die falsche Zählvariable als index, so könnte eine testausgabe aussehen:
Java:
			if (entries1[y][col].equals(value)) {
				entries2[j] = entries1[y];
				System.out.println(Arrays.toString(entries2[j]));
				j++;
			}

Im Array das von der Methode zurückgegeben wird werden jedoch trotzdem noch 'null' Einträge zu finden sein da das Array mit 3 Zeilen je 3 Spalten angelegt wurde.
 
Z

zero_day

Gast
aber wenn ich es entsprechend anlege:
Java:
		String[][] entries1 = new String[count()][3];
		String[][] entries2 = new String[count(col,value)][3];
(count() zählt alle einträge und count(col,value) zählt wie oft value in einer spalte vorkommt)
Dann bekomme ich nur eine out of Bounds Exception geworfen.
Java:
[null, null, null]
[b, b, b]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	at de.thm.oop.hue2.io.CSVFile.get(CSVFile.java:466)
	at de.thm.oop.hue2.StudentDB.main(StudentDB.java:50)
und NULL darf leider nicht drin sein, die methode muss dieses eine array zurückgeben, ist so vorgegeben.
 
Z

zero_day

Gast
ah okay die exception lag daran das ich die schleife nicht angepasst hatte da stand noch die 3 drinne^^
Java:
for (int y = 0; y < count(col,value; y++) {
			
			if (entries1[y][col].equals(value)) {
                entries2[j] = entries1[y];
                System.out.println(Arrays.toString(entries2[j]));
                j++;
aber leider bleibt das ergebnis
[null, null, null] :(
 
Z

zero_day

Gast
Hmm also jetzt sieht es so aus:
Java:
	int x = 0;
		String[][] entries1 = new String[count()][3];
		String[][] entries2 = new String[entries1.length][3];

		while ((currentline = br.readLine()) != null) {
			
			currentline_array = lineToRecord(currentline);
			
			entries1[x] = new String[] { currentline_array[0],
					currentline_array[1], currentline_array[2] };
			
			x++;
		
		}
		int j=0;
		for (int y = 0; y < count(col,value); y++) {
			
			if (entries1[y][col].equals(value)) {
                entries2[j] = entries1[y];
                System.out.println(Arrays.toString(entries2[j]));
                j++;
            }
		System.out.println(Arrays.toString(entries2[j]));
			
		}
Ergebnis leider [null, null, null].

Danke das du dich so bemühst :)
 
Z

zero_day

Gast
oh. dann so:

Java:
   int x = 0;
        String[][] entries1 = new String[count()][3];
        String[][] entries2 = new String[count(col,values)][3];
 
        while ((currentline = br.readLine()) != null) {
            
            currentline_array = lineToRecord(currentline);
            
            entries1[x] = new String[] { currentline_array[0],
                    currentline_array[1], currentline_array[2] };
            
            x++;
        
        }
        int j=0;
        for (int y = 0; y < entries1.length; y++) {
            
            if (entries1[y][col].equals(value)) {
                entries2[j] = entries1[y];
                System.out.println(Arrays.toString(entries2[j]));
                j++;
            }
        System.out.println(Arrays.toString(entries2[j]));
            
        }
Dann bekomme ich leider keine Ausgabe mehr o.o
 

Camill

Bekanntes Mitglied
Dürfte meiner Meinung nach dann so funktionieren wenn eine '1' zurückgeliefert wird. Das zweite syso in der for-Schleife kannst du dir sparen, da müsste sogar eine Exception fliegen.
 
Z

zero_day

Gast
Ich weiß nicht warum aber ohne die Syso gehts xD Jedenfalls zeigt der Testcase grün an. Dankeschön :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Json Datei auslesen Java Basics - Anfänger-Themen 4
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
S Aus einer .bz2 Datei auslesen Java Basics - Anfänger-Themen 2
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
B Datei auslesen und 2D-Array anlegen Java Basics - Anfänger-Themen 1
M Eigenschaften einer Datei auslesen Java Basics - Anfänger-Themen 5
Voreck Array aus txt datei auslesen Java Basics - Anfänger-Themen 2
OlafHD Datei Auslesen Java Basics - Anfänger-Themen 6
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4
I Informationen aus XML Datei auslesen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
M Datei-Namen aus .jar auslesen Java Basics - Anfänger-Themen 7
L Java Text datei nur bis zu einem Punkt auslesen? Java Basics - Anfänger-Themen 3
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
B Datei zeilenweise auslesen Java Basics - Anfänger-Themen 7
J Zeilen aus einer .txt-Datei auslesen und Variablen zuweisen Java Basics - Anfänger-Themen 11
Traxter Cookie Datei auslesen Java Basics - Anfänger-Themen 4
B CSV-Datei auslesen, in Liste speichern und sortieren Java Basics - Anfänger-Themen 20
J Datensätze aus Txt Datei auslesen - Datensätze durch stöbern Java Basics - Anfänger-Themen 5
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
N Bestimmte Zeile aus einer Datei auslesen Java Basics - Anfänger-Themen 10
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2
M Zahlen als Bytes in eine Datei speichern, daraus wieder auslesen Java Basics - Anfänger-Themen 2
L OOP Mit RandomAccesFile auslesen und in Datei schreiben Java Basics - Anfänger-Themen 8
F TextArea auslesen und in Datei speichern Java Basics - Anfänger-Themen 4
J Problem beim auslesen von Int Wert aus YML-Datei Java Basics - Anfänger-Themen 6
B Datei Auslesen + Schleife Java Basics - Anfänger-Themen 7
J Input/Output Daten in Datei schreiben und auslesen Java Basics - Anfänger-Themen 23
Y Datei mit relativem Dateipfad per FileReader aus .JAR heraus auslesen Java Basics - Anfänger-Themen 4
J Input/Output Datei auslesen, Pfad eingeben Java Basics - Anfänger-Themen 4
A HTML-Code auslesen und mit einem Wert in der property-Datei vergleichen Java Basics - Anfänger-Themen 2
E Text Datei Daten Auslesen und Schreiben Java Basics - Anfänger-Themen 3
P Properties Datei auslesen? Komfortabeler? Java Basics - Anfänger-Themen 2
K Mein Programm... Heute: Settings-Datei in .jar speichern und auslesen Java Basics - Anfänger-Themen 9
V Bestimmte Stellen aus .txt Datei auslesen Java Basics - Anfänger-Themen 11
Strahlungsleck Input/Output Zahlen aus Text-Datei auslesen Java Basics - Anfänger-Themen 6
R txt Datei auslesen Java Basics - Anfänger-Themen 3
R .log-Datei dauerhaft auslesen Java Basics - Anfänger-Themen 7
S Strings und Binärdaten aus der gleichen Datei auslesen Java Basics - Anfänger-Themen 24
V Datei in Ordner auslesen -> neuer Ordnername Java Basics - Anfänger-Themen 7
S Intwert aus einer txt.datei auslesen Java Basics - Anfänger-Themen 3
J Pfad bzw. Namen einer Datei auslesen Java Basics - Anfänger-Themen 6
C Arraylist in Txt Datei speichern und auslesen Java Basics - Anfänger-Themen 8
P mit java text-datei auslesen und weiter bearbeiten Java Basics - Anfänger-Themen 3
M Datei auslesen und Array schreiben?! Java Basics - Anfänger-Themen 8
M ständiges auslesen einer .txt datei Java Basics - Anfänger-Themen 2
J 2-dim Array auslesen und in Datei schreiben Java Basics - Anfänger-Themen 10
X Java txt datei auslesen Java Basics - Anfänger-Themen 10
M Sonderzeichen in einer Datei auslesen Java Basics - Anfänger-Themen 3
A Textdatei von URL auslesen und in Datei schreiben Java Basics - Anfänger-Themen 5
H Datei Byteweise mit wechselnden "Templates" auslesen Java Basics - Anfänger-Themen 2
Streeber Datei aus JAR auslesen Java Basics - Anfänger-Themen 3
B Datei auslesen Java Basics - Anfänger-Themen 2
G POI: Aus einer Datei auslesen und in eine andere Datei speichern Java Basics - Anfänger-Themen 18
manuakasam Datei auslesen - Geschwindigkeitsproblem Java Basics - Anfänger-Themen 2
C Zeilen aus einer Datei auslesen Java Basics - Anfänger-Themen 4
A Auslesen einer datei mit Scanner Java Basics - Anfänger-Themen 4
V Sequentielles Auslesen einer Datei Java Basics - Anfänger-Themen 7
T auslesen einer ini Datei Java Basics - Anfänger-Themen 13
G Datei blockweise auslesen Java Basics - Anfänger-Themen 6
Z Wie Datei effizient auslesen? Java Basics - Anfänger-Themen 1
M Auslesen einer Datei im Jar File Java Basics - Anfänger-Themen 5
T ArrayList in Datei speichern und auslesen Java Basics - Anfänger-Themen 7
J Datei auslesen und in Tabelle einfügen Java Basics - Anfänger-Themen 6
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
1 Zeit und Datum der Letzten Bearbeitung einer Datei auslesen Java Basics - Anfänger-Themen 3
P JSP - Daten aus externer Datei auslesen und anzeigen Java Basics - Anfänger-Themen 3
H2SO3- kompletten string aus datei auslesen (nicht .readline) Java Basics - Anfänger-Themen 21
O Text von Homepage via Java auslesen und in Text Datei speich Java Basics - Anfänger-Themen 1
T Bestimmte Zeile aus einer .txt-Datei auslesen? Java Basics - Anfänger-Themen 10
H Russische Zeichen in Datei schreiben und wieder auslesen Java Basics - Anfänger-Themen 3
H csv datei mit java auslesen und in konsole wiedergeben Java Basics - Anfänger-Themen 22
H Datei auslesen . Java Basics - Anfänger-Themen 33
M Probleme beim Datei auslesen Java Basics - Anfänger-Themen 6
N String/char-array aus datei auslesen Java Basics - Anfänger-Themen 2
S Text datei auslesen Java Basics - Anfänger-Themen 20
U Enumerationswerte aus XSD-Datei auslesen Java Basics - Anfänger-Themen 3
H Datei auslesen Java Basics - Anfänger-Themen 13
B String-Array in Datei speichern und wieder auslesen Java Basics - Anfänger-Themen 3
D Problem beim auslesen von txt datei. Java Basics - Anfänger-Themen 26
S Datei auslesen und neue schreiben (keine Textdatei) Java Basics - Anfänger-Themen 2
M Filesplitting - Teile einer Datei auslesen Java Basics - Anfänger-Themen 7
S ini Datei auslesen und in programm speichern Java Basics - Anfänger-Themen 2
J Datei aus unterschiedlichen Typen auslesen Java Basics - Anfänger-Themen 6
S Zahlen aus einer Datei auslesen Java Basics - Anfänger-Themen 11
C Probleme mit Auslesen einer Datei Java Basics - Anfänger-Themen 6
B Datei auslesen Java Basics - Anfänger-Themen 3
G Bestimmte Bereiche einer Datei auslesen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben