In der Regel verwendet eine CSV-Datei ein Komma und das Rückgabezeichen als Feld- und Zeilenbegrenzer.
Dies führt zu offensichtlichen Problemen mit Text, der beide Zeichen enthalten kann.
Natürlich gibt es dort Optionen (die ihnen entgehen), aber wie gehen die Leute damit um? Benutze verschiedene Charaktere - Pfeifen oder Tildas? Ihnen entkommen? Verwenden Sie keine durch Trennzeichen getrennten Dateien, es ist doch 2010 und wir haben jetzt XML?
Suchen Sie zumindest nach einer anständigen Chance, keine Probleme zu sehen.
(Nur um klar zu sein, dies ist eher eine Frage der Neugier als etwas Beständigeres. Ich habe immer wieder mit Daten gespielt, bin immer wieder darauf gekommen, aber normalerweise fühlt es sich ein bisschen, na ja, dreckig an.) und fragte mich, was die Erfahrung anderer Leute war).
quelle
Antworten:
Laut Wikipedia :
Und außerdem:
Ich weiß nicht, wer das erfunden hat, aber es zeigt, dass man irgendwann fliehen muss. Es ist die einzige feste Lösung. Alles andere ist nur Klebeband über Klebeband: Vielleicht funktioniert es erst einmal, aber irgendwann werden Sie auf einen Fall stoßen, in dem Sie eine Ausnahme benötigen, von einer Ausnahme abgesehen, und es dauert nicht lange, bis Ihr Regelwerk funktioniert ist weitaus komplexer als eine einfache Fluchtzeichenlösung.
Es scheint, dass CSV-Ersteller zuerst versuchten, Kommas zu vermeiden, indem sie eine spezielle Syntax in doppelten Anführungszeichen einführten, die das Speichern von Kommas ermöglichte, aber dann wollte jemand auch Zeichen in doppelten Anführungszeichen speichern, also mussten sie an diesem Punkt fliehen - lustigerweise mit der Anführungszeichen als Escape-Zeichen. Hätten sie beschlossen, erst richtig zu fliehen, wäre die Syntax jetzt einfacher.
quelle
Ich gehe davon aus, dass Sie so etwas haben:
Wenn Zeichenfolgen , die das Trennzeichen enthalten , werden nicht notiert oder entkommen, haben Sie keine wirkliche zuverlässige Möglichkeit , die Datei zu parsen.
Sie können die Daten jedoch untersuchen, um sie zu analysieren und Schlussfolgerungen zu ziehen:
Sie müssen einen Parser schreiben, um solche Dinge zu handhaben, aber es muss nicht kompliziert sein.
Nach meiner Erfahrung führt der Import von massiven Speicherauszügen aus Excel immer dazu, dass Sie zurückgehen und einige Sonderbälle überprüfen müssen. Ihre Herausforderung ist Ihrem Programm zu geben , gerade genug gesunden Menschenverstand in Bezug auf die Daten , so dass es nicht einen verrückten Einsatz macht. Dann überprüfen Sie, was protokolliert wurde und waschen / spülen / wiederholen.
Ich habe einmal eine interne FAQ für eine kleine Firma bearbeitet, die alle Ubuntu-Workstations verwendet. Ein Teil der FAQ gab 'Shell-Shortcuts' an, und es kam zu mir Pipe-abgegrenzt. Nun, die Antworten waren in der Regel auch durch Pipe-Trennzeichen (dh grep foo | something) getrennt und wurden weder zitiert noch geflüchtet. Ich fühle diesen Schmerz :)
quelle
An CSV ist bis zu einem gewissen Punkt nichts auszusetzen
CSV eignet sich gut für fest definierte Daten, deren Format sich wahrscheinlich nicht ändert und die den Empfänger-Parser nicht überraschen.
Hier ist eine handliche Liste der großen Fallstricke:
Sie könnten dies mit einem Metadaten-Header angehen, der beschreibt, wie die Felder analysiert werden sollen, aber Sie können auch einfach XML verwenden. Es ist wegen dieser Art von Freiform-CSV-Chaos, dass es erfunden wurde. Der XML-Ansatz scheint einfach zu schwer zu sein, als dass er ein einfaches Problem darstellen könnte.
Eine beliebte Alternative ist die Strategie "Weird Character Delimiter". Dies umgeht viele der oben genannten Probleme, da Sie so etwas wie ein | verwenden (Pipe-) Zeichen für die Feldbegrenzung und eine CRLF für die Datensatzbeendigung. Das Problem mit mehrzeiligen Feldern wird dadurch nicht umgangen (es sei denn, Sie verwenden einen Feldzähler), aber Sie erhalten gut formatierte Zeilen für Menschen.
Wenn Sie nur nach einer einfachen Möglichkeit suchen, mit solchen Dateien umzugehen , können Sie in der Java-Welt einfach OpenCSV darauf werfen . Auf diese Weise abstrahieren Sie alle Probleme in einem festgelegten Rahmen.
quelle
CSV ist in vielen Situationen immer noch ein gültiges Format, zumal es für Kunden immer noch die einfachste Möglichkeit ist, Daten zu schreiben, die in Ihre Anwendung importiert werden müssen. Nur wenige unserer Kunden beschäftigen sich gerne mit XML, vielleicht weil es sehr ausführlich ist und all diese "beängstigenden" spitzen Klammern hat. Es ist so viel einfacher für sie, ihre Gehirne um eine einfache Liste von Gegenständen zu wickeln, die durch ein vereinbartes Zeichen getrennt sind, und zuzustimmen, dass dasselbe Zeichen im Inhalt eines Feldes nicht zulässig ist.
Das heißt, Sie müssen die Eingabe immer noch korrekt verarbeiten und nach Situationen suchen, in denen ungültige Zeichen verwendet werden. Ich habe begonnen, FileHelpers für meine CSV-Parsing-Anforderungen zu verwenden.
quelle
Ich halte mich normalerweise an die Norm und entkomme ihnen. In den meisten Programmiersprachen gibt es eine gute eingebaute Unterstützung oder eine gute Bibliothek.
Es hängt von der Situation ab, welches Format verwendet wird, und CSV ist ein vernünftiges Format zum Austauschen einfacher Datenformatstrukturen.
quelle
Vergessen Sie CSV, verwenden Sie JSON . Leicht zu schreiben, leicht zu analysieren. XML ist so 2005 .
quelle
Normalerweise bekomme ich statt einer CSV-Datei eine TSV-Datei (durch Tabulatoren getrennte Werte), ziehe die Datei in Emacs und finde heraus, welches der wenigen seltenen Zeichen NIEMALS verwendet wird ($ ist normalerweise eine gute Wahl). und dann konvertiere ich alle tabs in $.
Von dort aus kann GNU AWK angewiesen werden, $ als Feldtrennzeichen zu verwenden, und Bob ist Ihr Onkel.
quelle