Problem mit CSting::Tokenize
-
Hallo,
ich parse eine csv-Datei. Darin sind die einzelen Spalten mit ";" getrennt. Mit Tokenize klappt das wunderbar bis auf eine Ausnahme:
Wenn eine Spalte leer ist schreibt z.B. Excel ";;". Diese Spalte erkenne ich beim parsen nicht! Tokenize gibt mir erst wieder den nächsten Wert bei dem ein Zeichen zwischen ";" und ";" ist.Wie kann ich die leere Spalte trotzdem finden (um sie z.B. mit einer Null zu füllen)?
-
mhhh... also ich würde etwas komplizierter daran gehen.
Falls Du Zeilenweise parst dann könntest du mitZeile.Find(';')die position des ersten Semikolon finden und falls die darauf folgende auch ein Semikolon ist dann an dieser Stelle ein Wert einfügen und die Zeile wieder zurück in ein temporäre Datei speichern. Wenn die Datei durch ist, dann kann mit Tokenizer alle Werte aus den temp. Datei herausgelesen werden.
-
Wenn Du Zeilenweise liest und in einer Zeile nur ";;" hast,
dann gibt Tokenize jeweils einen Leerstring zurück.
Kannst ja mal mit dem Debugger durchsteppen.
-
:Airdamn
Nein, bei ";;" springt Tokenize einfach zum nächsten Token bei dem mind. ein Zeichen zwischen ";" liegt.
BSP: folgende Zeile parsen:
1;2;3;4;;6;;8
Tokenize liefert (in Schleife):
"1" "2" "3" "4" "6" "8" (aber nicht den Leerschritt zwischen 4 und 6, ...)!!!!
-
ich glaub boost::Tokenize ueberspringt diese nicht
-
http://www.mpdvc.de/html.htm#Q17
Ist evtl. langsam. Schneller ist mit Sicherheit zeichenweise durch den String zu gehen und bei Bedarf den gefundenen Substring zu kopieren.
-
Wenn Du kein Boost hast/verwendest, aber STL verwenden kannst, dann kannst Du von diesem Thread eine explode-funktion kopieren und bei Dir einsetzen...
-
Wie wäre es vorher mit
Replace(";;",";0;");
-
wie dreckig #gg
-
Mr Evil schrieb:
wie dreckig #gg
Ja, ja, und dann noch von einer Frau

-
estartu schrieb:
Wie wäre es vorher mit
Replace(";;",";0;");
Aber wenn, dann muss Du es zweimal aufrufen

Da beim ersten mal aus ";;;;" ein ";0;;0;" wird und erst beim zweiten mal ein ";0;0;0;"
