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 =newBufferedReader(newFileReader(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 =newString[][]{{ 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.
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
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.
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.
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
wenn du weißt, dass es 512 Datensätze mit jeweils 3 Daten gibt, dann qnd bspw so...
Java:
int x =0;String[][] entries1 =newString[512][3];while((currentline = br.readLine())!=null){// lineToRecord wandelt einen String in ein Kommagetrenntes Array// um.
currentline_array =lineToRecord(currentline);
entries1[x]=newString[]{ currentline_array[0],
currentline_array[1], currentline_array[2]};
x++;
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 =newBufferedReader(newFileReader(csvFile));String currentline =null;
currentline = br.readLine();
currentline = br.readLine();// wegString[] currentline_array =null;int x =0;String[][] entries1 =newString[3][3];String[][] entries2 =newString[3][3];while((currentline = br.readLine())!=null){//lineToRecord wandelt einen String in ein Array
currentline_array =lineToRecord(currentline);
entries1[x]=newString[]{ 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 testenSystem.out.println(Arrays.toString(entries2[y]));}if(br !=null)
br.close();return entries2;}
[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.
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:
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.
(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.
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]
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.