Ich habe diesen Artikel gelesen und bin gespannt auf die richtige Antwort auf diese Frage.
Das einzige, was mir in den Sinn kommt, ist vielleicht, dass in einigen Ländern das Dezimaltrennzeichen ein Komma ist und es Probleme beim Austausch von Daten in CSV geben kann , aber ich bin mir meiner Antwort nicht ganz sicher.
project-management
David Gasquez
quelle
quelle
Antworten:
Die Spezifikation des CSV-Formats ist in RFC 4180 definiert . Diese Spezifikation wurde veröffentlicht, weil
Leider hat sich seit 2005 (Datum der Veröffentlichung des RFC) nichts geändert. Wir haben noch eine Vielzahl von Implementierungen. Der in RFC 4180 definierte allgemeine Ansatz besteht darin, Felder, die Zeichen wie Kommas enthalten, in Anführungszeichen zu setzen. Diese Empfehlung wird jedoch nicht immer von unterschiedlicher Software erfüllt.
Das Problem ist, dass in verschiedenen europäischen Gebietsschemata das Komma als Dezimaltrennzeichen verwendet wird, sodass Sie
0,005
anstelle von schreiben0.005
. In anderen Fällen werden Kommas anstelle von Leerzeichen verwendet, um z. B. Zifferngruppen zu kennzeichnen4,000,000.00
(siehe hier ). In beiden Fällen würde die Verwendung von Kommas möglicherweise zu Fehlern beim Lesen von Daten aus CSV-Dateien führen, da Ihre Software nicht genau weiß, ob0,005, 0,1
es sich um zwei oder vier verschiedene Zahlen handelt (siehe Beispiel hier ).Last but not least, wenn Sie Text in Ihrer Datendatei speichern, sind Kommas in Text viel häufiger als beispielsweise Semikolons. Wenn Ihr Text also nicht in Anführungszeichen eingeschlossen ist, können solche Daten auch leicht mit Fehlern gelesen werden .
Nichts macht Kommas besser oder schlechter als Feldtrennzeichen , sofern CSV-Dateien gemäß Empfehlungen wie RFC 4180 verwendet werden, die vor den oben beschriebenen Problemen schützen. Wenn jedoch die Gefahr besteht, dass das vereinfachte CSV-Format Felder in Anführungszeichen nicht einschließt oder die Empfehlung inkonsistent verwendet wird, sind andere Trennzeichen (z. B. Semikolon) sicherer.
quelle
,
eines selteneren Trennzeichens die Daten aufgebläht werden, weil Sie sie ständig maskieren müssen, ist jedoch richtig. Und natürlich gibt es all die Leute, die glauben, dass sie wissen, wie CSV funktioniert, aber das wirklich nicht.Technisch gesehen ist Komma so gut wie jedes andere Zeichen, das als Trennzeichen verwendet werden soll. Der Name des Formats weist direkt darauf hin, dass Werte durch Kommas getrennt sind (Comma-Separated Values).
Bei der Beschreibung des CSV-Formats wird Komma als Trennzeichen verwendet.
Alle Felder, die Kommas enthalten, müssen in doppelte Anführungszeichen gesetzt werden. Dies ist also kein Problem für das Einlesen von Daten. Siehe Punkt 6 in der Beschreibung :
Zum Beispiel verwenden die Funktionen
read.csv
undwrite.csv
von R standardmäßig Komma als Trennzeichen.quelle
values
kommagetrennte Antworten handelt. Bei anderen, die auf europäischeformatting
Zahlen anspielen , ist dies kein Problem für die CSVstandard
, da Sie oben Punkt 6 korrekt zitieren. Abweichungen von der "richtigen Verwendung" bestehen bei jedem Datenformat. Der Punkt ist - kennen Sie Ihre Daten. Andere erwähnentab
oder;
grenzen ab, jedoch können diese dieselben Probleme wie Kommas haben, wenn Sie mit Daten arbeiten, die vom Benutzer eingegeben wurden (möglicherweise über ein Formular und erfasst von einer Datenbank). Ich musste mich mit Freitext-Eingabefeldern herumschlagen, die von Menschen verwendet werden habe fett gefingerttab
... es saugt)In vielen Ländern ist es nicht nur ein Zifferntrennzeichen in Zahlen, sondern auch Bestandteil der Adresse (z. B. Kundenadresse usw.). Während einige Länder kurze, genau definierte Adressen haben, haben viele andere, langwierige Adressen, einschließlich manchmal zwei Kommas in derselben Zeile. Gute CSV-Dateien enthalten solche Daten in doppelten Anführungszeichen. Aber stark vereinfachte, schlecht geschriebene Parser ermöglichen es nicht, solche zu lesen und zu unterscheiden. (Dann gibt es das Problem, doppelte Anführungszeichen als Teil der Daten zu verwenden, z. B. ein Zitat aus einem Gedicht).
quelle
Während die Antwort von @Tim richtig ist - ich möchte hinzufügen, dass "csv" als Ganzes keinen gemeinsamen Standard hat -, werden insbesondere die Escape-Regeln überhaupt nicht definiert, was zu "Formaten" führt, die in einem Programm, aber nicht in einem anderen, lesbar sind . Dies wird durch die Tatsache verschärft, dass jeder "Programmierer" unter der Sonne nur denkt "oooh csv - ich werde meinen eigenen Parser bauen!" und verfehlt dann alle Randfälle.
Darüber hinaus fehlt csv die Fähigkeit, Metadaten oder sogar den Datentyp einer Spalte zu speichern. Dies führt zu mehreren Dokumenten, die Sie lesen müssen, um die Daten zu verstehen.
quelle
Wenn Sie das Komma-Trennzeichen weglassen und ein Tabulatorzeichen verwenden können, haben Sie einen viel besseren Erfolg. Sie können die Datei mit dem Namen .CSV belassen, und das Importieren in die meisten Programme ist normalerweise kein Problem. Geben Sie beim Importieren Ihrer Datei einfach TAB-Zeichen statt Komma an. Wenn Ihre Daten Kommas enthalten, treten Probleme bei der Angabe von durch Kommas getrennten Zeichen auf, da Sie sich dessen bewusst sind.
quelle
|
als Trennzeichen in selbst gebrauten CSV-ähnlichen Textdateien von Datensätzen (mit Buchtiteln und anderen Dokumentmetadaten) erzielt .|
Tritt in den Daten, mit denen ich arbeite, nie auf, so kann ich einfach Perl-Skripte schreiben, die einfach geteilt / verbunden werden, ohne auf Anführungszeichen jeglicher Art zu prüfen. Dies geschah für ein einmaliges Projekt, bei dem lediglich aus einer MS Access-Datenbank gespeicherte Metadaten verarbeitet wurden. Wählen Sie für größere Projekte oder wenn Sie vorhaben, Daten langfristig in diesem Dateiformat zu speichern, etwas Robusteres aus! Ich könnte immer etwas optimieren, wenn der Stapel dieses Monats etwas kaputt macht.split
Befehl für Stata schrieb, schaute ich mir unter anderem das Perl-Äquivalent an, um zu sehen, was es tat und was nicht. Nicht der Quellcode, sondern die angebotene Funktionalität.cut
,sort
unduniq
.ASCII stellt uns vier "Trennzeichen" zur Verfügung, wie unten in einem Ausschnitt aus der Manpage ascii (7) * nix gezeigt:
Diese Antwort bietet einen guten Überblick über die beabsichtigte Verwendung.
Natürlich mangelt es diesen Steuercodes an der Benutzerfreundlichkeit (Lesbarkeit und Eingabe) von gängigeren Begrenzungszeichen, sie sind jedoch akzeptable Optionen für den internen und / oder kurzlebigen Datenaustausch zwischen Programmen.
quelle
Das Problem ist nicht das Komma; Das Problem ist das Zitieren. Unabhängig davon, welche Datensatz- und Feldbegrenzer Sie verwenden, müssen Sie darauf vorbereitet sein, diese im Inhalt zu erfüllen. Sie benötigen also einen Zitiermechanismus. UND DANN benötigen Sie eine Möglichkeit, um die Anführungszeichen ebenfalls anzuzeigen.
Das Befolgen des RFC 4180-Standards macht alles für alle einfacher.
Ich musste persönlich ein Skript schreiben, um wahrscheinlich die Ausgabe eines Programms zu korrigieren, bei dem dies falsch war. Ich bin also etwas militant. "wahrscheinlich reparieren" bedeutet, dass es für MEINE Daten funktioniert hat, aber ich kann Situationen sehen, in denen es fehlschlagen würde. (In der Verteidigung dieses Programms wurde es vor dem Standard geschrieben.)
quelle