StreamTokenizer oder StringTokenizer oder was? CSV2XML

Super, das geht schon mal sehr in die richtige Richtung nur leider funktioniert das bei mir noch nicht richtig.

Das ist mein Input:

Year;WorldPopulation
1990;"234;252"
1991;123123
1993;123123
1994;535345

Mein Code sieht so aus:

Java:
BufferedReader csvReader = new BufferedReader(new StringReader(csvString));
 StreamTokenizer st = new StreamTokenizer(csvReader);
st.whitespaceChars(';', ';');
st.quoteChar('"');   
while(st.nextToken() != StreamTokenizer_EOF) {
        String output = st.sval;
        System.out.println(output);                
}

Der Output ist dieses hier:

Year
null
WorldPopulation
null
null
234;252
null
null
null
null
null
null
null
null
null

Wieso gibt es da diese ganzen nulls und nicht die richtigen Werte?

Zudem gibt es jetzt noch eine andere Frage. Wie bekomme ich raus wie viele Spalten es in der CSV Datei gibt?

Vielen Dank.

Gruß und so
Loki2
 
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.StreamTokenizer;
import java.io.StringReader;

/**
 * @author Thomas.Darimont
 * 
 */
public class StreamTokenizerExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        String input = "Year;WorldPopulation\n1990;\"234;252\"\n1991;123123\n1993;123123\n1994;535345";
        System.out.println(input);
        System.out.println("#####");

        StreamTokenizer streamTokenizer = new StreamTokenizer(new StringReader(
                input));
        streamTokenizer.whitespaceChars(';', ';');
        streamTokenizer.quoteChar('"');
        streamTokenizer.ordinaryChars('0', '9');
        streamTokenizer.wordChars('0', '9');

        while (streamTokenizer.nextToken() != StreamTokenizer_EOF) {
            System.out.println(streamTokenizer.sval);
        }
    }
}

Ausgabe:
Code:
Year;WorldPopulation
1990;"234;252"
1991;123123
1993;123123
1994;535345
#####
Year
WorldPopulation
1990
234;252
1991
123123
1993
123123
1994
535345

Wie viele Spalten eine CSV Datei hat kannst du an der Anzahl an Delimitern (in der ersten, n-ten Zeile) erkennen. Einfach mit obigem Regex Splitten und dann die Elemente (groups) zählen.

Gruß Tom
 
Hi,

super vielen Dank dafür. Die Werte bekomme ich jetzt schon mal richtig nur mit der Spaltenanzahl habe ich noch ein Problem:

Wie viele Spalten eine CSV Datei hat kannst du an der Anzahl an Delimitern (in der ersten, n-ten Zeile) erkennen. Einfach mit obigem Regex Splitten und dann die Elemente (groups) zählen.

Wie meinst Du das?
Wenn ich von dem BufferedReader csvReader ein readLine und dann ein Split mache kann ich aber ja auch einen falschen Wert bekommen wenn die CSV Datei keine Header Row hat und in der ersten Reihe ein String mit dem Delimiter ist. Verstehst Du wie ich das meine?

Vielen Dank für die Hilfe.
 
Zurück