Seite 1 von 1
CSV-Parser
Verfasst: 11.10.2009 17:03
von Little John
xxx
Re: CSV-Parser
Verfasst: 12.10.2009 11:05
von Kiffi
Hallo Little John,
erstmal vielen Dank für Deinen Code!
Derzeit komme ich leider nicht dazu, ihn intensiver zu testen. Ich habe gestern Abend mal ganz bräsig
eine eher kleine CSV-Datei (26 MB) parsen lassen. Nach 5 Stunden habe ich dann vorzeitig abgebrochen
Den meisten Strom wird sicherlich das Erstellen des XML benötigen.
Der Code wird in dieser Form für größere CSV also nicht praktikabel sein.
Noch was:
Code: Alles auswählen
[...]
ElseIf Char = #LF
Break ; Ende des Datensatzes
[...]
stimmt so nicht.
Sowas ist auch möglich:
da musstu nochmal ran
Grüße ... Kiffi
Re: CSV-Parser
Verfasst: 13.10.2009 16:41
von Little John
Hallo Kiffi,
danke für Dein Feedback!
Kiffi hat geschrieben:Ich habe gestern Abend mal ganz bräsig
eine eher kleine CSV-Datei (26 MB) parsen lassen. Nach 5 Stunden habe ich dann vorzeitig abgebrochen
Den meisten Strom wird sicherlich das Erstellen des XML benötigen.
Der Code wird in dieser Form für größere CSV also nicht praktikabel sein.
Oh gottogott

Um die Geschwindigkeit hatte ich mich noch nicht so gekümmert, weil ich zunächst "kugelsicheren" Code schreiben wollte. Aber so geht's natürlich nicht.

Ich werde demnächst eine Version mit Linked Lists anstelle eines XML-Baums schreiben, und dann mal die Geschwindigkeiten vergleichen.
Kiffi hat geschrieben:Noch was:
Code: Alles auswählen
[...]
ElseIf Char = #LF
Break ; Ende des Datensatzes
[...]
stimmt so nicht.
Sowas ist auch möglich:
Ich weiß, das ist doch in meiner kleinen Testdatei "csv_demo.csv" auch so.

Die Stelle die Du oben zitiert hast findet nur Zeilenumbrüche
außerhalb von Quotes. Zeilenumbrüche innerhalb von Quotes werden hier behandelt:
Code: Alles auswählen
char = ReadCharacter(fn)
While char <> #QUOTE And Eof(fn) = #False
content$ + Chr(char)
char = ReadCharacter(fn)
Wend
Vielleicht kann ich das noch vereinfachen.
Inzwischen ist mir aber noch was anderes aufgefallen. Syntaktisch falsche Felder wie
oder
werden z.Z. nicht als fehlerhaft erkannt.
Ich habe nirgendwo eine Empfehlung gelesen, wie man damit umgehen sollte. Ich denke am besten bricht die Prozedur die Verarbeitung des Datensatzes an der Stelle ab und liefert einen Fehlercode zurück. Ich habe den Code schon fast fertig entspr. geändert, aber schneller ist er dadurch auch nicht gerade geworden.
Gruß, Little John
Re: CSV-Parser
Verfasst: 13.10.2009 16:52
von Kiffi
Little John hat geschrieben:Die Stelle die Du oben zitiert hast findet nur Zeilenumbrüche außerhalb von Quotes.
au weia! Nicht richtig hingeguckt. Mea culpa!
Grüße ... Kiffi
Re: CSV-Parser
Verfasst: 13.10.2009 17:04
von Little John
Kiffi hat geschrieben:Mea culpa!
Ego te absolvo.
Gruß, Little John
Re: CSV-Parser
Verfasst: 20.10.2009 18:08
von Little John
xxx
Re: CSV-Parser
Verfasst: 20.10.2009 18:39
von Little John
2
Kiffi:
Bei mir läuft's "ein bisschen" schneller als bei Dir. Was hast Du denn da angestellt?
Ernsthaft: Ich vermute, dass das Programm bei Dir in einer Endlosschleife hängengeblieben ist. Vielleicht kannst Du da nochmal nachkucken? Wenn das stimmt, würde ich den Bug natürlich gern beseitigen. Allerdings ist der Code jetzt gegenüber der "5-Stunden-Version" schon verändert (bessere Syntaxfehler-Erkennung).
Gruß, Little John
Re: CSV-Parser
Verfasst: 20.10.2009 20:30
von Kiffi
@Little John:
LinkedList-Variante:
Lesen: 24 Sekunden
Schreiben: 5 Sekunden
Respekt!
Little John hat geschrieben:2
Kiffi:
Bei mir läuft's "ein bisschen" schneller als bei Dir. Was hast Du denn da angestellt?

in der Tat: die 13.2 Sekunden bei Dir sind schon beeindruckend.
Ich habe offensichtlich einen lahmeren Rechner als Du (siehe Zeiten oben).
Allerdings sollte der Unterschied bei der XML-Variante nicht so krass sein.
Ich teste grade Deinen neuen XML-Code. Ich melde mich in
ein paar Stunden wieder.
Grüße ... Kiffi