Frage zu CSV-Datei und Java?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Zu 1)

Deinem angehängten Quellcode zufolge, hast du bereits eine Methode, um alle Zeilen der CSV-Datei einzulesen. Das erklärt dann auch, wieso countCsvData_CSV_NUM eine Liste übergeben bekommen soll.

Die erste Aufgabe ist also nur Recherchearbeit, denn Listen kennen ihre Länge und haben auch eine Methode, die diese zurückgibt.

Hier findest du die API Referenz der Java Standardbibliothek: https://docs.oracle.com/en/java/javase/14/docs/api/index.html. In der kannst du nach den Methoden des List-Interface nachschlagen.

Zu 2)

Erneut wird dir schon einiges abgenommen. Die gerade schon erwähnte Methode, die die CSV-Datei einliest, trennt sogar bereits die Spalten auf. Deshalb werden den print-Methoden auf deinem Aufgabenblatt generische Listen übergeben.

List<String[]>

Jeder Eintrag in der Liste entspricht einer Zeile aus der CSV-Datei in Form eines Arrays. Jeder Array-Eintrag entspricht einer Spalte.

Die euch vorgegebenen Methodensignaturen sind übrigens falsch. Statt List sollte für Aufgabe 1 und 2 jeweils List<String[]> dort stehen.

Aber alles was du nun machen musst, ist, mit einer Schleife über die Liste zu iterieren und in jedem Eintrag den dritten Eintrag herauszuziehen und mit der Jahreszahl zu vergleichen, die der Methode übergeben wird. Wenn es passt, wird die Spalte in einer neuen Liste gespeichert, ansonsten nicht.

Zu 3)

Gleiches Prinzip, mit dem einzigen Unterschied, dass du dich mit dem Datentyp Map auseinandersetzen solltest. Dazu findest du in der API Referenz von Java natürlich ebenso eine eigene Seite.

Für das Einlesen der CSV-Datei wird diesmal die ...assoc-Methode benutzt, die auf deinem Codeblatt erwähnt wird. Der korrekte Typ für deinen ersten Parameter lautet List<Map<String, String>>.

Zu 4)

Wie in der vorherigen Aufgabe sammelst du erst einmal die richtigen Einträge in einer Liste. Danach gehst du noch einmal über diese Liste drüber, ermittelst die entsprechenden Jahreszahlen, addierst sie miteinander und dividierst die Summe mit der Anzahl an Listeneinträgen.

Es gibt auch die Möglichkeit, die Daten schon beim ersten Sammelvorgang zu holen und den Durchschnitt zu berechnen, doch ich denke, der Zwischenschritt mit einer Zwischenliste ist für dich einfacher.

Kurzum: Es ist nur etwas Recherchearbeit vonnöten und mit einigen Grundlagen wie Kontrollstrukturen (Schleifen, Verzweigungen) solltest du zurechtkommen.

Anker12387 
Fragesteller
 07.11.2020, 15:31

zu 2 habe ich jetzt for(String: csvData){ oder ist der Anfang bereits schon falsch?

0
regex9  07.11.2020, 15:54
@Anker12387

Die Syntax ist falsch. Die Liste besteht aus String-Arrays und der Laufvariable fehlt ein Name.

for (String[] entry : csvData) {
0
Anker12387 
Fragesteller
 07.11.2020, 16:38
@regex9
for (String[] entry : csvData) {
    csvData.get(3);
    if...
}

die get methode müsste definitiv passen aber wahrscheinlich ist die Umsetzung falsch... die drei müsste ja den dritten Eintrag bedeuten, oder ich habe das Konzept nicht richtig verstanden.

0
regex9  07.11.2020, 16:54
@Anker12387

Du hast die Schleife nicht verstanden.

Angenommen, die Liste sieht visuell so aus:

data = {
  [ "a", "b", "c" ],
  [ "d", "e", "f" ],
  [ "g", "h", "i" ]
}

Dann nimmt sich die Schleife je Iterationsschritt einen Eintrag (ein String-Array) heraus und speichert diesen in entry. Dieser Beispielcode:

for (String[] entry : data) {
  System.out.println(entry[0]);
}

würde demzufolge für diese Ausgabe sorgen:

a
d
g
0