CSV-Datei mit mehreren Datentypen auslesen

cHucKy51

Mitglied
Ich habe nun eine CSV-Datei mit Strings und Integer, wobei die Integer Indizes sind, die immer zueinander gehören.

Bsp. der CSV-Datei:
Code:
1;Berlin
2;Stuttgart
#
1;18.04.2007 16:00; 18 Grad
1;18.04.2007 17:00; 17 Grad
2;18.04.2007 16:00; 20 Grad

Die Tabelle, die ich ausgeben will, soll wie folgt aussehen, wobei der Spaltentitel "Datum" statisch ist und die Städte je nach Datei variieren können:
Code:
Datum               Berlin        Stuttgart
18.04.2007 16:00   18 Grad        20 Grad
18.04.2007 17:00   17 Grad

wie man sehen kann, können auch Lücken bleiben.

Mein Ansatz war nun, die Titel mit Indizes in ein Array "columnNames" zu schreiben.
Nun suche ich nach dem Trennzeichen "#".
Alle Werte nach diesem Trennzeichen schreibe ich in ein Array "dataValues".

Nun brauche ich ja in Prinzip ein drittes Array, in das ich je nach gleichen Indizes die Gesamtdaten schreibe, die ich in meiner Tabelle ausgeben will.

Leider kann ich keine Integer auslesen und damit das Array durchgehen. Auch ist mir schleierhaft, wie ich das Problem mit den leeren Feldern lösen soll.
Meine Idee wäre hier, bei nicht vorhandenen Werten ins dritte Array einfach "null" zu schreiben.

Kann mir einer helfen?
 
Ich habe gerade etwas vom StreamTokenizer gelesen, der anscheinend Zahlen erkennen kann. Hat jemand schonmal mit diesem gearbeitet und kann mir sagen, ob er für diese Aufgabe geeignet ist?
 
Hat wirklich keiner eine Ahnung, wie ich obige CSV-Datei auf die oben gezeigte Tabellenform bringen kann?
Ich sitze heute schon den ganzen Tag daran und habe einfach keinen Ansatz und auch insgesamt wahrscheinlich zu wenig Ahnung von Java, um die Aufgabe zu bewältigen.
 
Hallo,

heute hab ich leider keine Zeit, aber wenn bis morgen niemand dir helfen konnte, werde ich mal schauen was ich tun kann.

MFG

zEriX
 
Hallo, hatte mal ein ähnliches Problem, bei dem ich Messdaten von verschiedenen Sensoren aus einer CSV-Datei laden musste. Die Datei war wie folgt aufgebaut:
Code:
RECORDED
00:00:00,245; 12345
00:01:00,123; 12398
STATION
12345; Station 1
12390; Station 2
...

Habe das mit http://opencsv.sourceforge.net/ gelöst. Denke damit solltest du auch deine Datei einlesen und auswerten können.
 
Leider muss ich das ohne Zusatztools lösen. Das hilft mir also nicht wirklich weiter.

@zerix: Wäre super, wenn du mir helfen könntest...
 
Zuletzt bearbeitet:
Hallo.

Lies einfach die Datei zeilenweise ein (Stichworte:BufferedReader, readLine)

Dann machst Du auf den String der die Zeile enthält einen einen split, der reguläre Ausdruck bei einer csv-Datei ist einfach ";" (Stringx.split(";");) Du erhältst einen Array, der die Werte zwischen den ";" enthält.

Das sollte natürlich nur passieren, wenn Du nicht diese Zeilen mit STATION oder ähnlichem passiert.

Das speicherst Du Dir alles ab und dann kommt halt noch Dein Ausgabeformat.

Hoffe, dass es Dir weitergeholfen hat?

mfg
I
 
Hallo,

also bevor du die split-Methode vom String nimmst, nimm lieber den StringTokenizer. der ist schneller von der Verarbeitung.


MFG

zEriX
 
Zu bedenken ist:

siehe http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html
etwas neuer http://java.sun.com/j2se/1.5.0/docs/api/java/util/StringTokenizer.html

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

The following example illustrates how the String.split method can be used to break up a string into its basic tokens:

String[] result = "this is a test".split("\\s");
for (int x=0; x<result.length; x++)
System.out.println(result[x]);

mfg
I
 
Zuletzt bearbeitet:
In Vergleichen mit String.split() war der StringTokenizer um einiges schneller. Ich wenn ich mich richtig erinnere war er auch schneller als regex, bin mir da aber nicht so ganz sicher.
 
Zurück