Yuuri schrieb:
Falls du es nicht kapierst, nochmal explizit für dich:
In CSV kann man mit üblichen Tools die Trenner variabel setzen. Diese Aussage impliziert
nicht, dass es geschehen muss oder soll. Wenn ich hier also höre, dass der Trenner durch ein Semikolon ersetzt werden soll, weil jener Trenner auch im Feld vorkommt, rollen sich mir die Fußnägel hoch, weil das
- vollkommen valides CSV ist
- eine zwangsweise Manipulation der Daten mit allen möglichen Nebeneffekten bedeutet
Mögen sich Deine Fußnägel ja dabei rollen, daß es ein vaildes CSV ist, besteitet keiner. Es ist aber kein gutes Datenformat, weil dort Zeichen EINDEUTIG sein sollen. Komma ohne Escape als Feld und Spaltentrenner ist Käse. So eine Schweinerei findest Du in keinem seriösen Datenformat. Und in allen anderen Formaten findest Du sehr wohl Escaping und Co. Und wie ich oben bereits zeigte, selbst Excel excapt seine " beim Exportieren.
Yuuri schrieb:
Deshalb kam ich mit dem Beispiel des Leerzeichens als Trenner um die Absurdität dessen aufzuzeigen. Statt also irgendwas zu ersetzen oder zu escapen oder sonstige Scherzveranstaltungen durchzuführen, habe ich lediglich dafür gestimmt einen ordentlichen CSV-Parser einzusetzen.
Was an der Stelle durchaus legitim ist, aber trotzdem kann man das besser machen.
Yuuri schrieb:
Nicht mehr, nicht weniger. Auch ein Semikolon ist nicht standardkonform (auch wenn es viele machen), sowie werden Feldbegrenzer nicht durch einen Backslash escaped.
Was bei CSV ein Fehler ist. Und Semicolon ist bei Excel bzw. Windows als Standard gesetzt, beschwere Dich also bitte nicht bei uns dafür.
Yuuri schrieb:
Mag sein, dass es Implementierungen gibt, der offizielle Standard besagt aber eine andere Verfahrensweise durch die Dopplung des Begrenzers. Ein konformer CSV-Parser kommt aber auch mit Leerzeichen klar und die Erkennung kann auch automatisch erfolgen.
Du beschränkst Dich eben alleine auf CSV. Und CSV ist kein (leider) valides und anerkanntes Standardformat mit einer entsprechenden Norm und Abnahmen dahinter, vergleichbar mit zig anderen Formaten.
Yuuri schrieb:
Hast du einen Punkt gegen den Einsatz eines CSV-Parsers? Hast du einen Punkt für den Einsatz der Shell mit cut, awk und Co? Regex? Nein?
Ich schon. Für csvtool braucht es Python3. Und in manchen Kundensituationen und -systemen darf man nicht so einfach eine Software installieren, geschweige denn haben die Unix-/Linux-Server einen Internet- oder Repository-Zugang. Zudem ist cut, awk und Co. (was man für bash heute aber wirklich nicht mehr braucht, die bash ist mit den Inline-Funktionen deutlich schneller) sofort auf jedem Unix bzw. Linux-System ohne weitere Anpassungen oder Installationen portabel.
Yuuri schrieb:
Und dass der TE sowieso keine Kontrolle über den Export hat, hab ich auch erwähnt.
Na ja, wenn man was verbessern kann, sollte man es tun. Fragen kostet ja nichts.
Yuuri schrieb:
Wichtig ist, das Format zu parsen und nicht die Daten zu interpretieren oder manipulieren.
Ja, aber trotzdem kommt das vielfach vor, daß Dateien vor- oder nachverarbeitet werden müssen. Und wenn hier kein csvtool verwendet werden kann, muß man das an der Stelle so machen.
Yuuri schrieb:
Wenn der Text den Trenner oder ein Newline enthält. Ganz nach RFC also.
Verstehe ich nicht, sorry, bitte nochmal langsam. Ich starte Excel, neues Blatt, gebe die Felde wie in meine Screenshot so ein, formatiere die Felder als Text. Wie bringe ich nun Excel dazu, " mit , zu schreiben, ich bekomme es nicht hin. Entschuldige bitte, wenn ich hier Excel für mich als CSV Referenz-Generator sehe.
Wie Du in meinem Beispiel sehen kannst, führt selbst Excel bei " korrekt ein Excaping mit """ ein.
Yuuri schrieb:
CSV UTF-8 mit BOM Marker. Und es wird auch wieder ordentlich importiert (wenn man es ordentlich über den Wizard macht). Die Erkennung hat auch problemlos funktioniert, einzig mit der Raute als Trenner gibts wohl irgendein Problem.
Anhang anzeigen 1123654
Du hast doch bereits festgestellt, dass es locale dependent ist...?
Ja. Aber von den normalen Bearbeitern ändert da keiner was. Fast alle verwenden bei CSV über Excel eben den Standard mit ;.
Yuuri schrieb:
Excel hat ergo überhaupt keinen Standard, sondern richtet sich ausschließlich nach den Systemeinstellungen.
Nope, anscheinend doch, sonst würde es die " nicht escapen.
Yuuri schrieb:
Aber egal... Das Thema ist durch, der TE hat nun genug Hinweise bekommen. Er nutzt nun erstmal csvtool.
Richtig. Trotzdem hätte ich gerne gewußt, wie man so ein Dateiformat mit Excel hinbekommt.
Siehe Beispiel in Wikipedia
https://de.wikipedia.org/wiki/CSV_(Dateiformat)
Code:
Stunde,Montag,Dienstag,Mittwoch,Donnerstag,Freitag
1,Mathematik,Deutsch,Englisch,Erdkunde,Politik
2,Sport,Deutsch,Englisch,Sport,Geschichte
3,Sport,"Religion (ev., kath.)",Kunst,,Kunst
Ich bekomme das ohne weiteres korrekt importiert. Sobald aber Excel hier wieder eine CSV-Datei rausschreiben soll, sind die " weg, und ich bekomme sie nicht erzeugt.
Also nochmal die Frage, wie exportierte ich genau das gleiche Format, was ich importierte?
Update: Habs gerafft, man muß Spalten und Feldtrenner gleich haben, dann kommt ein " darum.