StreamTokenizer oder StringTokenizer oder was? CSV2XML

Loki2

Erfahrenes Mitglied
Hallo

Ich habe mir ein kleines Tool geschrieben welches aus CSV XML macht. Das funktioniert bisher auch super
Mein Problem ist nur das wenn das definierte Trennzeichen, z.B. das ; auch in einem String vorkommt mir das Ding um die Ohren fliegt.
Irgendwie benötige ich was was auch mit eingeschlossenen String zu recht kommt.

Wenn ich eine Datei habe die so aussieht:

blabla;sdfsdf;ethfdcb

funktioniert es super aber wenn in der Datei Werte wie

blabla;"sdfs;df";ethfdcb

stehen funktioniert es nicht da diese Zeile dann einmal zu viel gesplittet wird.

Bisher habe ich dafür immer den StringTokenizer benutzt aber leider komme ich damit jetzt nicht weiter, da bin ich dann auf den StreamTokenizer gestoßen allerdings weiss ich nicht wie ich dem sagen kann bei welchem Zeichen er trennen soll und was das Zeichen für eingeschlossene Strings ("sdfs;df") sind.

Versteht ihr mein Problem und könnt mir weiterhelfen?

Vielen Dank.

Gruß und so
Loki2
 
Nö, was ist das und wozu auch?
Das was rauskommt ist ja wunderbar. Mein Problem ist das CSV richtig zu splitten....
 
Hallo,

hast du es schon mal mit OpenCSV versucht. Du könntest auch den String mit String.split() splitten.

MFG

zEriX
 
Nö, was ist das?

Ein kleines Beispiel:
In Elemente bzw. Attribute unterteilen und alles in ein Document schreiben und dieses dann über den XMLOutputter ausgeben. Bsp:

Code:
import java.io.FileOutputStream;
import org.jdom.Document;
import org.jdom.output.XMLOutputter;

public class XMLEintrag {

	public void xmlErstellen(Document doc) {

		XMLOutputter outp = new XMLOutputter();
		outp.output( doc, new FileOutputStream("test_file.xml"));
	
	}
	
}
 
Wenn ich String.split() benutze wird diese Zeile

bla;"rsfsf;sdfsadf";asdasd

aber ja auch wieder einmal zu oft gesplittet nämlich zwischen "rsfsf;sdfsadf". DAS genau ist ja mein Problem.

OpenCSV: Wie gesagt, das XML ist nicht das Problem lediglich das richtige Splitten der CSV Zeilen ist das Problem aber auch nur bei eingeschlossenen Strings wie diesem "rsfsf;sdfsadf".

Wieso spielt das eine Rolle wo ich das CSV her bekomme?

Danke für die Mühen.

Gruß und so
Loki2
 
OpenCSV ist nicht da um es in XML zu wandeln, sondern eine API um mit Java CSV-Datei zu bearbeiten. Ich habe zwar damit noch nicht gearbeitet, aber das dürfte dir doch helfen. Soweit ich nämlich weiß, bekommst du da deine Elemente die du brauchst.

MFG

zEriX
 
Hallo,

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

import java.io.StreamTokenizer;
import java.io.StringReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Pattern p = Pattern.compile("\".*?\"|(?<=^|;)[^;]*");
        Matcher m = p.matcher("bla;\"rsfsf;sdfsadf\";asdasd");
        while (m.find()) {
            System.out.println(m.group());
        }

        System.out.println("#####");

        StreamTokenizer streamTokenizer = new StreamTokenizer(new StringReader(
                "bla;\"rsfsf;sdfsadf\";asdasd"));
        streamTokenizer.whitespaceChars(';', ';');
        streamTokenizer.quoteChar('"');

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

Ausgabe:
Code:
bla
"rsfsf;sdfsadf"
asdasd
#####
bla
rsfsf;sdfsadf
asdasd

Gruß Tom
 
Zurück