Warum verwenden wir weiterhin CSV? [geschlossen]

13

Warum verwenden wir weiterhin CSV?

Vor kurzem habe ich mich dem Gesundheitsbereich zugewandt. Trotz der hervorragenden Arbeit an Datenübertragungsstandards erfolgt die gesamte Datenübertragung in CSV , sowohl für die Berichterstellung an externe Organisationen als auch für Datenmigrationen bei der Implementierung neuer Systeme.

Leider ist die Verwendung von CSV die Ursache für die endlose Wiederholung der gleichen dummen Fehler mit der gleichen Verschwendung von Entwicklerzeit. (Schlechtes Escape, Nichtbearbeiten von Nullfeldern usw.)

Ich weiß, wir können es besser machen, und alles zwischen JSON und XML (abhängig von der Instanz) wäre in Ordnung. (Die meiste Zeit sind dies Daten, die von einem MS SQL Server 2005 auf einen anderen übertragen werden!)

Ich habe das Gefühl, jedes Mal, wenn ich das sehe, sehe ich buchstäblich zu, wie ein Entwickler eine andere Zeit verschwendet.

Warum winken wir uns also gegenseitig zu? Wann hören wir auf?

Stephen
quelle
20
Wenn Sie gerade erst in den Gesundheitsbereich einsteigen und glauben, dass CSV schlecht ist, warten Sie einfach, bis Sie auf HL7 stoßen!
14.
3
@ Greg LOL, erschrecken Sie ihn nicht, die Überraschung ist immer am besten :)
James Love
47
-1 Dies ist eine Anti-CSV-Kampagne gegen Probleme, die nicht durch CSV verursacht wurden. Was genau würde Ihrer Meinung nach passieren, wenn Sie XML ohne Bibliothek lesen und schreiben würden? Ihre Probleme wären hundertmal schlimmer.
Jesse Millikan
12
"Also, warum schießen wir uns gegenseitig an? Wann hören wir auf?" Ich weiß nicht, wo ich arbeite, schaffen wir es, CSV einwandfrei zu verwenden, ohne dass irgendjemand davon abgehalten wird (in der Tat - es ist die XML-Phase, die weitaus frustrierender ist). Vielleicht machen Sie und Ihre Mitarbeiter etwas falsch?
FrustratedWithFormsDesigner
3
Bisher fehlt in der gesamten Diskussion ein sehr reales Problem mit CSV: Es ist wahrscheinlich, dass das Trennzeichen in den Daten enthalten ist, und CSV geht dieses Problem nicht optimal an (das Setzen von Anführungszeichen um die Daten drängt das Problem nur nach unten). . Ein besserer Ansatz wäre die Verwendung von durch Pipes getrennten Dateien.
Larry Coleman

Antworten:

10

In Ihrem Fall scheint CSV nicht gut zu passen, da es keine genauen Spezifikationen gibt.

Für nicht triviale Daten ist dies nicht die richtige Wahl.

Warum / Wann ist CSV eine gute Wahl? Wahrscheinlich zu viele Beispiele, um sie zu erwähnen, die Vorteile der Einfachheit für flache Daten liegen auf der Hand. Solange die Daten ordnungsgemäß bereinigt / ausgeblendet werden, gibt es keine Probleme. Im Allgemeinen wären all diese Fälle jedoch einfach / trivial. Natürlich ist das im Inhalt enthaltene Standardtrennzeichen beim Umgang mit CSV oft ein Manko.

Wenn Sie jedoch einen größeren Aufwand betreiben, als einen nicht-technischen Client zum Senden von Daten aus einer Excel-Tabelle oder einem anderen ähnlichen Anwendungsfall zu veranlassen, ist CSV wahrscheinlich für eine ernsthafte Verwendung unzureichend.

XML ist weitaus besser geeignet (ja noch besser als JSON), da Sie detaillierte standardisierte Schemaspezifikationen dafür vornehmen können. (Ganz zu schweigen davon, dass Spezifikationen / Schemata die Flexibilität mehrerer Implementierungsstile, XSD, DTD und Relax NG, genießen.)

Für geschlossene Regelkreissysteme, insbesondere wenn es um Bandbreite geht, ist JSON möglicherweise besser geeignet als XML, aber das Fehlen von Schemaspezifikationssprachen schließt es häufig von Anwendungen auf Unternehmensebene aus.

ocodo
quelle
3
In der Tat "Solange die Daten ordnungsgemäß bereinigt / ausgeblendet werden". Allerdings scheinen viele Programmierer in der Lage zu sein, dies falsch zu write('"');write(fld1);write('"');verstehen , indem sie ihre eigenen (in Pseudocode ad nauseum) schreiben. Dann vermissen sie es, Anführungszeichen um etwas zu setzen. Dann schreiben sie ihren eigenen Parser ...
Gerry
3
Ja, die Roll-Your-Own-Crew sollte wirklich anfangen, dieses Internet- Ding zu benutzen, vielleicht sogar die Bedeutung des Wortes lernen ... Bibliothek.
ocodo
Informationen teilen! wiederverwendbarer Code! dumme neue Ideen. Die Fehler anderer Leute zu wiederholen war gut genug für meinen Urgroßvater, und es ist gut genug für mich!
Steve314
@ Steve314 - / me "macht ein Gesicht von Horror und Belustigung."
ocodo
Aber CSV hat eine harte Spezifikation . Unser Problem ist jetzt das übliche - Excel entspricht nicht 100%.
gbjbaanb
63

Lassen Sie mich ein paar Punkte zugunsten von CSV hervorheben:

  • CSV ist einfach zu implementieren und zu analysieren (mehr als jede andere in OP vorgeschlagene Alternative)
  • CSV wird von fast jeder Software auf dem Planeten (Vergangenheit und Gegenwart) verstanden.
  • CSV erzwingt ein ziemlich flaches, einfaches Schema (es gibt eine einzige flache Liste von Feldern)
  • CSV ist besser lesbar als XML, JSON oder (UGH!) HL7 (V2.x, pre-xml)
G__
quelle
14
Sie müssen nicht "Devils Advocate" spielen ... all diese Punkte, die Sie machen, sind vollständig gültig und erklären, warum CSV immer noch verwendet wird. Es ist einfach einfacher.
GroßmeisterB
7
@Stephen: Wie viele verschiedene CSV-Varianten kennst du?
FrustratedWithFormsDesigner
3
@FrustratedWithFormsDesigner Wie viele Konventionen können Sie sich vorstellen?
Stephen
3
@ Pierre 303 Ich wünschte, es wäre idiotensicher. Ich würde mich freuen, wenn es ein Entwickler-Beweis wäre.
Stephen
8
@ Pierre303, idiotensicher ... Wenn du denkst, du hast etwas 'idiotensicher' gemacht, hast du es nicht mit genug Idioten getestet.
ocodo
29

Abwärtskompatibilität. Wenn Ihr Web-Service für externe Organisationen CSV-Daten verarbeitet und alle vorhandenen Tools CSV-Daten verarbeiten, hat keine der Parteien eine Motivation, zu einem neuen Service zu wechseln. Warum sollte Ihre externe Organisation ein anderes Format unterstützen? Niemand, mit dem sie arbeiten, kann es benutzen! Warum würden Sie anfangen, ein anderes Format zu produzieren? Keine der Organisationen, mit denen Sie zusammenarbeiten, akzeptiert dies!

Das eigentliche Problem, das ich hier sehe, ist, warum Ihre Entwickler jedes Mal ihren eigenen CSV-Code rollen? Wenn sie eine stabile, solide CSV-Bibliothek verwenden würden, hätten sie die von Ihnen beschriebenen Probleme nicht. Die Probleme werden durch Entwickler verursacht, die ihre eigene Lösung entwickeln, anstatt eine Bibliothek zu verwenden, und ich sehe ehrlich gesagt nicht, wie der Wechsel zu JSON oder XML dies magisch behebt. Es gibt immer noch Leute, die versuchen, sie zusammenzufassen, anstatt eine Bibliothek zu benutzen.

Anon.
quelle
4
+1 für jedes eigene Rollen. Ich sehe Entwickler, die nicht lernen, kein fehlerhaftes Datenformat. :-)
G__
"Abwärtskompatibilität" - Sie haben natürlich Recht - aber nicht vorwärts zu kommen kostet Tausende.
Stephen
Es ist in Ordnung, Ihre eigene CSV-Bibliothek zu rollen ... verwenden Sie sie einfach wieder !
GroßmeisterB
5
@Stephen: Nein, die Neuimplementierung von CSV kostet jedes Mal Tausende. CSV als Format ist in Ordnung, die Entwickler, die es nicht richtig machen können, sind das Problem.
Anon.
6
@Stephen: Also ist dein Problem mit CSV, dass es zu einfach ist und du etwas komplexeres willst?
Anon.
15

CSV ist etwas schneller , kleiner , sehr einfach zu handhaben (auch in Excel) und wird von vielen vorhandenen Anwendungen verstanden. Es ist ein weit verbreiteter Standard .

In vielen Situationen ist es immer noch die erste Wahl.

Ich persönlich mag dieses Format immer noch sehr. Aber ich benutze JSON auch, aber für andere Anwendungen wie Web-UI.


quelle
1
Ich bin mit allem einverstanden, mit Ausnahme der anfänglichen Verwendung von "ein bisschen".
Orbling
3
Es kann eine absolute Basis mit Excel sein, wenn Sie Daten haben, die führende Nullen behalten müssen ... fragen Sie mich, woher ich das weiß! ... ansonsten bietet Excel eine gute Oberfläche.
Dal
@Dal: Ich habe in einer Kreditgenossenschaft gearbeitet und musste mich mit CSV-Dateien befassen, die Kreditkartennummern enthielten. Welche haben 16 Ziffern. Dieser Excel wurde auf 15 gerundet.
dan04
Oder schlimmer noch, dass sie in wissenschaftliche Notation umgewandelt wurden. :( Ich erinnere mich, als ich das erste Mal einen Fehler in unserer ACH-Verarbeitung bekam, dass eine entfernte Kontonummer ungültig war, nur um herauszufinden, dass jemand die CSV in Excel bearbeitet hatte (nur um eine Zeile zu entfernen) und eine Menge von 30 geändert hatte stellige Kontonummern in 2.3456356e29 und so weiter.
cabbey
1
@Jeanne: Wenn CSV tatsächlich eine Unterscheidung zwischen Zahlen und Zeichenfolgen wie JSON hätte, wäre es ziemlich einfach, Excel mitzuteilen, welcher Typ die Werte sind. Diese Probleme sind vor allem auf die strikte Typisierung von CSV zurückzuführen.
dan04
15

In erster Linie, denn obwohl das Konsumieren von CSV-Daten (geringfügig) nicht trivial sein kann, ist das Generieren äußerst einfach.

Ich möchte auch darauf hinweisen, dass weder JSON noch XML wirklich einfacher zu finden sind (sowohl für den Produzenten als auch für den Konsumenten). Tatsächlich muss man sich kaum umschauen, um zu wissen, dass viele Leute versuchen, reguläre Ausdrücke zum Parsen von XML-Daten zu verwenden, obwohl es absolut keine Frage ist, dass dies nicht funktionieren kann und wird.

Die meisten Probleme, die bei CSV auftreten können (und auftreten können), treten auch bei JSON und XML auf. Insbesondere XML bringt viele weitere potenzielle Probleme mit sich. Eine Bibliothek zum Parsen von XML-Daten ist im Allgemeinen größer, langsamer und schwieriger zu verwenden als eine ähnliche Bibliothek für CSV-Daten.

Jerry Sarg
quelle
1
Die korrekte Darstellung ist äußerst einfach. Wenn Sie nicht triviale Daten haben, ist es nicht trivial, etwas zu konsumieren, dem eine Spezifikation fehlt.
Stephen
2
@Stephen: beachte, dass ich nicht "richtig" in diesen ersten Satz aufgenommen habe. Sein Weglassen war beabsichtigt!
Jerry Coffin
4

Erstens stimme ich zu, dass es einige sehr reale Probleme mit dem Format gibt:

  • Es ist streng getippt.
    • Ohne Unterscheidung zwischen Text- und Zahlenwerten wird Excel falsch raten und Ihre Postleitzahlen und Kreditkartennummern vermasseln.
    • Es gibt keine Standardmethode zur Darstellung von Binärdaten.
    • Es gibt keine Standardmethode, um zwischen NULLund zu unterscheiden. Dies ''ist ein Problem beim Importieren von CSV-Dateien in SQL-Datenbanken.
  • Schlechte Unterstützung für "Sonderzeichen".
    • Das Fehlen von numerischen Zeichenreferenzen wie (XML &#xNNNN;oder JSON \uNNNN) bedeutet, dass es keine Standardmethode zur Darstellung von Steuerzeichen oder Nicht-ASCII-Zeichen gibt.
    • Viele Implementierungen implementieren Zeilenumbrüche in einem Feld nicht ordnungsgemäß.
  • Das Fehlen eines Standards. Es gibt RFC 4180 , aber es wird nicht allgemein befolgt.

Andererseits:

  • Die Alternativen sind schlimmer. JSON und XML, die auf Bäumen basieren, eignen sich schlecht für tabellenbasierte Daten, insbesondere im Hinblick auf ...
  • KOMPAKTHEIT! In XML müssen Sie für jede Spalte in jeder Zeile ein Start- und ein Endtag haben . In CSV schreiben Sie die Spaltenüberschriften nur einmal.
  • CSV ist sehr einfach zu generieren.
  • Nicht-Programmierer können CSV-Dateien in Excel öffnen.
dan04
quelle
im Rückwärtsgang; Die Verwendung dieser Daten in Excel wäre eine Straftat, CSV lässt sich leicht schlecht generieren, die Kompaktheit ist kein Problem, Bäume passen besser zu diesen Daten.
Stephen
4

Viele Analysten verwenden Excel (für Pivot-Tabellen usw.), und die Ausgabe von CSV ist viel einfacher als die Ausgabe des nativen Excel-Formats.

Fußnote: Angesichts der vielen Probleme, die ich beim Umgang mit CSV-Dateien in Excel festgestellt habe, wie das Entfernen von führenden Nullen und der Verlust der Genauigkeit, ist dies wahrscheinlich ein falsches Gefühl, einfacher zu sein.

Scott McIntyre
quelle
Diese +1000. Excel ist die Killer-Anwendung (sobald Sie es wissen) für die schnelle und schmutzige Analyse von Daten. Das Exportieren nach Excel verleiht Nicht-Entwicklern in Wirtschaft, Forschung usw. mächtige Befugnisse. Excel beherrscht die Welt. CSV-Exporte werden in Excel ausgeführt.
Johannes
2

Wenn etwas mit CSV nicht stimmt, ist es so, dass CSV so einfach erscheint, dass viele Entwickler versuchen, ihre eigenen Parser / Writer zu erfinden, und später CSV dafür verantwortlich machen, dass sie nicht korrekt mit dem Escape-Vorgang umgehen. Mit einem guten CSV-Parser (viele gute Parser gibt es da draußen) wird es überhaupt kein Problem geben.

Jemand, von dem CSV erwähnt wird, ist nicht gut für nicht-triviale Daten, aber ich stimme nicht zu. XML erlaubt nicht-triviale Daten, da unterschiedliche Datensätze in unterschiedliche "Container" -Tags gestellt werden können. Mit CSV können Sie immer verschiedene Daten in verschiedenen Dateien ablegen, um den gleichen Effekt zu erzielen.

Darüber hinaus widerspricht die Verwendung von XML für den Datentransfer meiner Meinung nach grundsätzlich dem Zweck von XML - der Datentransfer impliziert normalerweise einen stabilen Vertrag zwischen Anbietern und Verbrauchern, während XML erweiterbare Informationen enthalten soll, die interpretiert werden müssen, wenn sie konsumiert werden.

Kodismus
quelle
1

Ich denke, CSV ist einfach gut, wenn Sie nur einfache Textdaten haben, mit nur Kommas und entweder Semikolon / Endzeile am Ende.

Baumarchitekturdaten oder zusammengesetzte Daten können mit CSV kaum verwendet werden.

CSV ist nur eine einfache 2D-Anordnung von Text wie in Excel, nicht viel ...

jokoon
quelle
1

Hier dreht sich wirklich alles um Mainframes und Excel.

Mainframes, weil diese alten Systeme herausgefunden haben, wie sie mit CSV kommunizieren können. So können die großen Apps, die die Daten sichern, sie lesen und schreiben und haben keinen Grund, sie jetzt zu ändern.

Excel, weil es CSVs direkt öffnen kann. Tatsächlich übernimmt es die Erweiterung .csv, wenn Sie es installieren. Benutzer klicken einfach auf das leicht lustig aussehende Excel-Symbol und es öffnet sich und ein schönes Gitter, mit dem sie sich herumschlagen können.

Moderne Excel-Versionen können z. B. XML direkt lesen. Aber dazu muss ein Benutzer ein bisschen mehr verstehen als "Doppelklick auf das Bild". Und ein Doppelklick auf das rechte Bild kann in manchen Branchen zu viel verlangen. . .

Wyatt Barnett
quelle
-1

Ich habe viele technische Antworten gesehen, aber ich vermute, dass die Leute CSV verwenden, weil sie mit vielen anderen Techniken / Technologien vertraut sind

Homde
quelle
-1

warum benutze ich es

  1. der Kunde will es
  2. Es ist schneller als XML über das Netzwerk (kleinere Netzwerklast)
  3. Es ist nichts komplexeres erforderlich, um die Daten zu vermitteln
  4. Plattform überqueren
  5. für Menschen lesbar
  6. einfach, Leser und Schreiber dafür zu implementieren

usw. usw.

jwenting
quelle