CSV-Parser
Re: CSV-Parser
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:
stimmt so nicht.
Sowas ist auch möglich:
da musstu nochmal ran 
Grüße ... Kiffi
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
[...]
Sowas ist auch möglich:
Code: Alles auswählen
1;2;3
1;"Das ist ein Text
mit Zeilenumbruch";3
1;2;3

Grüße ... Kiffi
a²+b²=mc²
Re: CSV-Parser
Hallo Kiffi,
danke für Dein Feedback!

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.

Die Stelle die Du oben zitiert hast findet nur Zeilenumbrüche außerhalb von Quotes. Zeilenumbrüche innerhalb von Quotes werden hier behandelt:
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
danke für Dein Feedback!
Oh gottogottKiffi 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.

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.
Ich weiß, das ist doch in meiner kleinen Testdatei "csv_demo.csv" auch so.Kiffi hat geschrieben:Noch was:stimmt so nicht.Code: Alles auswählen
[...] ElseIf Char = #LF Break ; Ende des Datensatzes [...]
Sowas ist auch möglich:
Code: Alles auswählen
1;2;3 1;"Das ist ein Text mit Zeilenumbruch";3 1;2;3

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
Inzwischen ist mir aber noch was anderes aufgefallen. Syntaktisch falsche Felder wie
Code: Alles auswählen
12"3
Code: Alles auswählen
"Huhu" xy
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
au weia! Nicht richtig hingeguckt. Mea culpa!Little John hat geschrieben:Die Stelle die Du oben zitiert hast findet nur Zeilenumbrüche außerhalb von Quotes.

Grüße ... Kiffi
a²+b²=mc²
Re: CSV-Parser
Ego te absolvo.Kiffi hat geschrieben:Mea culpa!

Gruß, Little John
Re: CSV-Parser
2Kiffi:
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
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
@Little John:
LinkedList-Variante:
Lesen: 24 Sekunden
Schreiben: 5 Sekunden
Respekt!
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
LinkedList-Variante:
Lesen: 24 Sekunden
Schreiben: 5 Sekunden
Respekt!

in der Tat: die 13.2 Sekunden bei Dir sind schon beeindruckend.Little John hat geschrieben:2Kiffi:
Bei mir läuft's "ein bisschen" schneller als bei Dir. Was hast Du denn da angestellt?

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
a²+b²=mc²