Wahre Unterschied zwischen Excel CSV und Standard-CSV

16

Was ist der wahre Unterschied zwischen einem Excel-CSV und einem Standard-CSV?

Wie können Spalten mit Zeilenumbrüchen in einer Zelle unterschiedlich codiert werden?

user157195
quelle

Antworten:

19

Es hängt davon ab , was Sie unbedingt als „Standard“ CSV definieren. Soweit ich betroffen bin, folgt Excel die in umrissener Regeln RFC 4180 , das „Common Format und MIME - Typ für CSV - Dateien“.

Stellen Sie sich eine Tabelle vor, in der die erste Zelle in der ersten Zeile zwei Zeilenumbrüche enthält. In Excel sieht das folgendermaßen aus:

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | col1, line1a  |            |            |
|   | col1, line1b  |            |            |
|   | col1, line1c  | col2, row1 | col3, row1 |
| 2 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

Wie würde Excel dies nun exportieren? Mal sehen - ein Texteditor würde dies anzeigen:

"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"

Nicht sehr raffiniert. Es fügt einen Wagenrücklauf (hex 0D) , wobei der Zeilenumbruch in unserer Zelle war. Jede Zelle ist in doppelte Anführungszeichen gesetzt. Außerdem werden die tatsächlichen Zeilen mit einem Wagenrücklauf getrennt.

Um dies richtig zu analysieren, müsste ein CSV-Parser

  • Ignoriere diesen Wagenrücklauf, wenn er in doppelten Anführungszeichen steht (zB eine Zelle)
  • nicht , dass Wagenrücklauf ignorieren , wenn es außerhalb der doppelten Anführungszeichen erscheint

Wenn es das nicht getan hat, dann würden Sie am Ende mit etwas verstümmelt wie diese - zur Kenntnis , dass es jetzt vier Linien anstelle von zwei, weil es die Zeilenumbrüche zu ignorieren ist fehlgeschlagen.

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | "col1, line1a |            |            |
| 2 | col1, line1b  |            |            |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

Aber mal sehen, was der RFC sagt, vielleicht hat Excel es richtig gemacht?

Felder, die Zeilenumbrüche (CRLF), doppelte Anführungszeichen und Kommas enthalten, sollten in doppelte Anführungszeichen eingeschlossen werden.

Genau das hat Excel getan. Zusammenfassend scheint Excel den Empfehlungen einer "Standard" CSV-Datei zu folgen. Bei einem ordnungsgemäßen CSV-Parser sollten auch Excel-CSV-Dateien gelesen werden können.

slhck
quelle
@shhck: Warum sehe ich CSV-Parser-Implementierungen, die "Excel" CSV mit "CSV" trennen? Ich fand auch, dass Excel eine ziemlich robuste Implementierung ist.
user157195
@ user157195 Abhängig vom Parser sollten Sie in dessen Dokumentation nachlesen, warum es einen Unterschied zwischen Excel- und Nicht-Excel-Eingaben gibt. Ich würde nicht verstehen, warum es eine geben sollte. Ich weiß nur , das von R , die wie jede andere nur Excel CSV behandelt. Es kann jedoch auch XLS lesen.
Slhck
2
Als jemand, der seit Jahren Excel-generierte CSV-Dateien in allen Formen und Größen programmatisch liest, kann ich bestätigen, dass slhck 100% korrekt ist - Excel erzeugt 100% "Standard" CSV-Dateien. Jedes Mal.
Mark Henderson
@Farseeker Danke für die Bestätigung! (und Sie haben jetzt 1337
Wiederholungen
5
Vorsicht! In Ländern, in denen ',' als Dezimaltrennzeichen verwendet wird, ist Excel "sehr, sehr clever" und verwendet ein ';' Trennzeichen. Dies erspart Zee Germanz, zu viele "Anführungszeichen", "in", "ihren", "Dateien" zu sehen. Leider erhält AllSmooshedUpIntoASingleCellOnEveryLine, wenn sie es dann an das britische Büro senden. Brillant.
Luke Usherwood
-1

Mein Verständnis von der ursprünglichen CSV-Implementierung war, dass alle Textfelder in Anführungszeichen eingeschlossen waren und Zahlen nicht sein mussten. Excel tut dies nicht und wenn Sie versuchen, Ihre in Excel generierten CSV-Dateien auf Nicht-Microsoft-Plattformen hochzuladen, schlagen diese fehl. Dies ist ein Standard-Microsoft-Ansatz, ignorieren Sie die Interoperabilität und konzentrieren Sie sich darauf, die Regeln blind zu befolgen. Ähnliches geschah mit dem IE. Sie befolgten die HTML / CSS-Regeln korrekt für die Auffüll- und Randattribute und ignorierten die Tatsache, dass jede vorhandene Webseite und jeder vorhandene Webbrowser sie unterschiedlich behandelten. Das Ergebnis, fast jede Webseite hat jetzt spezielle Regeln für den Internet Explorer. Ich finde die mit Excel erstellten CSV-Dateien unbrauchbar und benutze eine Spalte mit "verketteten" Funktionen, um sie manuell zu erstellen.

Edwin
quelle