Gibt es eine Möglichkeit, Kommas in CSV-Spalten einzufügen, ohne die Formatierung zu unterbrechen?


282

Ich habe eine zweispaltige CSV mit einem Namen und einer Nummer. Der Name einiger Personen verwendet beispielsweise Kommas. Joe Blow, CFA.Dieses Komma unterbricht das CSV-Format, da es als neue Spalte interpretiert wird.

Ich habe nachgelesen und das häufigste Rezept scheint darin zu bestehen, dieses Zeichen oder das Trennzeichen durch einen neuen Wert (z this|that|the, other. B. ) zu ersetzen .

Ich möchte das Komma-Trennzeichen wirklich beibehalten (ich weiß, dass Excel andere Trennzeichen unterstützt, andere Interpreter jedoch möglicherweise nicht). Ich möchte auch das Komma im Namen behalten, da es Joe Blow| CFAziemlich albern aussieht.

Gibt es eine Möglichkeit, Kommas in CSV-Spalten einzufügen, ohne die Formatierung zu unterbrechen, z. B. indem Sie sie maskieren?



Kleiner Hack, der bei mir funktioniert hat: Öffnen Sie die CSV-Datei in einem Texteditor und fügen Sie sie in ein Excel-Dokument ein. Funktioniert, wenn Sie dies in großen Stücken tun können.
Jonas

@ Jonas: Excel kann nicht erraten, ob dasselbe Token als Trennzeichen oder Teil der Daten verwendet wird. Das Einfügen aus einem Texteditor ändert daran nichts.
Unsichtbarer

Antworten:


370

Schließen Sie das Feld in Anführungszeichen ein, z

field1_value,field2_value,"field 3,value",field4, etc...

Siehe Wikipedia .

Aktualisiert :

Um ein Anführungszeichen zu codieren, verwenden Sie "ein doppeltes Anführungszeichen in einem Feld als ""und das gesamte Feld wird """". Wenn Sie also beispielsweise in Excel Folgendes sehen:

---------------------------------------
| regular_value |,,,"|  ,"", |"""   |"|
---------------------------------------

Die CSV-Datei enthält:

regular_value,",,,""",","""",","""""""",""""

Ein Komma wird einfach in Anführungszeichen gesetzt, ,wird also ",".

Ein Komma und Zitat Bedürfnisse gekapselt und zitiert werden, so ","wird """,""".


4
Das hat bei mir funktioniert! Ich habe eine js-Variable in CSV exportiert und ein zusätzliches Anführungszeichen um jede Zeichenfolge gesetzt, um das in der Frage erwähnte Problem von "John Blow, CFA" zu lösen.
Madhulika Mukherjee

Was ist, wenn in jeder Zelle sowohl Anführungszeichen als auch Kommas stehen?
Speedplane

2
Ich habe die Antwort mit einigen Beispielen aktualisiert - kurz gesagt, Kommas werden in Anführungszeichen (z. B. ",") eingekapselt und Anführungszeichen werden (z. B. """)
Ryan

6
Dies sollte nun die akzeptierte Antwort sein, da es eine großartige Lösung vorschlägt, die wahrscheinlich 99% der Anwendungsfälle löst.
BuZz

Gibt es eine C # -Bibliothek zum Parsen von CSV-Dateien mit Anführungszeichenfeldern?
Minh Tran

34

Das Problem mit dem CSV-Format ist, dass es nicht eine Spezifikation gibt, sondern mehrere akzeptierte Methoden, bei denen nicht unterschieden werden kann, welche verwendet werden sollen (zum Generieren / Interpretieren). In einem anderen Beitrag habe ich alle Methoden zum Entkommen von Zeichen (in diesem Fall Zeilenumbrüche, aber dieselbe Grundvoraussetzung) besprochen . Grundsätzlich kommt es darauf an, einen CSV-Generierungs- / Escape-Prozess für die beabsichtigten Benutzer zu verwenden und zu hoffen, dass der Rest nichts dagegen hat.

Referenzspezifikationsdokument .


10
RFC 4180, Common Format und MIME-Typ für CSV-Dateien (Comma-Separated Values), ietf.org/rfc/rfc4180.txt ; eine weitere "offizielle" Spezifikation.
Shi

3
Die Einbeziehung des am weitesten verbreiteten Ansatzes würde dies zu einer großartigen Antwort machen. So wie es aussieht, gewinnt die Antwort von @Ryan.
Rinogo

16

Wenn Sie das machen möchten, was Sie gesagt haben, können Sie Anführungszeichen verwenden. Etwas wie das

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

Jetzt können Sie in Ihrer Namensvariablen ein Komma verwenden.


Danke Cloud für deinen Tipp, das hat es geschafft: $whatever = "\"".$name."\"";
Washere

Danke für deine Lösung.
Bhavin Thummar

10

Sie müssen diese Werte angeben.
Hier ist eine detailliertere Spezifikation.


2
Es gibt mehrere Spezifikationen, Excel verwendet Anführungszeichen um den Eintrag, Linux verwendet das Backslash-Zeichen. Leider müssen Sie für Ihr Zielgruppen- / Zielsystem entkommen.
Rudu

7

Zusätzlich zu den Punkten in anderen Antworten: Wenn Sie in Excel Anführungszeichen verwenden, sollten Sie die Platzierung Ihrer Leerzeichen beachten. Wenn Sie eine Codezeile wie diese haben:

print '%s, "%s", "%s", "%s"' % (value_1, value_2, value_3, value_4)

Excel behandelt das ursprüngliche Anführungszeichen als wörtliches Anführungszeichen, anstatt es als Komma zu verwenden. Ihr Code muss geändert werden zu

print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4)

Es war diese Subtilität, die mich hierher brachte.


3

Ich hatte das gleiche Problem und das Zitieren ,half nicht. Schließlich ersetzte ich das ,mit +, beendete die Verarbeitung, speicherte die Ausgabe in einer Outfile und ersetzte das +mit ,. Das mag hässlich erscheinen, aber es hat bei mir funktioniert.


2
Und was hätten Sie getan, wenn die Daten "+" Zeichen enthalten hätten?
Andrew Morton

1
@ AndrewMorton Ja, das ist eine Herausforderung. In meinem Fall bin ich mir +jedoch sicher, dass dies in meinen Daten überhaupt nicht vorhanden ist. Vielen Dank für Ihren freundlichen Kommentar.
Mohammed

4
Die einfache und robuste Methode besteht darin, die Zeichenfolgen in doppelte Anführungszeichen zu setzen und doppelte Anführungszeichen in Zeichenfolgen zu umgehen, indem zwei davon wie verwendet werden "". Dies ist die normale Vorgehensweise.
Andrew Morton

1
Wenn es nicht funktioniert, überprüfen Sie, ob Sie keine Leerzeichen neben Ihren Begrenzungskommas generieren: "Frosch", "Gelb, Grün" funktioniert nicht "Frosch", "Gelb, Grün"
funktioniert

Persönlich fand ich den zweiten Kommentar von @AndrewMorton hier, der mir tatsächlich half zu verstehen, was besser ist als eine akzeptierte Antwort. Schritt 1 - doppelte Anführungszeichen in den Datenfeldern umgehen, z. B. in Python: field = field.replace('"', '""')Schritt 2 - nach Schritt 1 das Feld selbst in doppelte Anführungszeichen einschließen, z. B. field = '"' + field + '"'- dann sind Sie, glaube ich, eisern gegossen.
Will Croxford

3

Abhängig von Ihrer Sprache ist möglicherweise eine to_json-Methode verfügbar. Das wird vielen Dingen entgehen, die CSVs brechen.


3

Ich habe festgestellt, dass einige Anwendungen wie Numbers in Mac das doppelte Anführungszeichen ignorieren, wenn davor Platz ist.

a, "b,c"funktioniert nicht während der a,"b,c"Arbeit.


1
Sie haben mir wahrscheinlich gerade eine Stunde Arbeit erspart ... danke!
Shaun314

1

Sie können Ihre Werte beispielsweise in PHP base64_encode ($ str) / base64_decode ($ str) codieren.

IMO ist dies einfacher als das Verdoppeln von Anführungszeichen usw.

https://www.php.net/manual/en/function.base64-encode.php

Die codierten Werte enthalten niemals ein Komma, sodass jedes Komma in Ihrer CSV ein Trennzeichen ist.



0

Sie können das Text_QualifierFeld in Ihrem Flatfile-Verbindungsmanager als verwenden ". Dies sollte Ihre Daten in Anführungszeichen setzen und nur durch Kommas getrennt werden, die außerhalb der Anführungszeichen stehen.


0

Wenn der Artikelwert ein doppeltes Anführungszeichen (") hat, ersetzen Sie ihn zunächst durch 2 doppelte Anführungszeichen (" ").

item = item.ToString().Replace("""", """""")

Zum Schluss wickeln Sie den Artikelwert ein:

LINKS: Mit doppeltem Anführungszeichen (")

RECHTS: Mit doppeltem Anführungszeichen (") und Komma (,)

csv += """" & item.ToString() & ""","

0

Doppelte Anführungszeichen haben bei mir nicht funktioniert, bei mir \". Wenn Sie als Beispiel doppelte Anführungszeichen setzen möchten, können Sie festlegen \"\".

Sie können als Beispiel Formeln erstellen:

fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");

wird in csv schreiben:

= IF (C3 = 1, B3)


0

Vielleicht nicht das, was hier gebraucht wird, aber es ist eine sehr alte Frage und die Antwort kann anderen helfen. Ein Tipp, den ich beim Importieren in Excel mit einem anderen Trennzeichen nützlich finde, ist das Öffnen der Datei in einem Texteditor und das Hinzufügen einer ersten Zeile wie:

sep = |

wo | ist das Trennzeichen, das Excel verwenden soll. Alternativ können Sie das Standardtrennzeichen in Windows ändern, aber etwas langwierig:

Systemsteuerung> Uhr & Region> Region> Formate> Zusätzliche> Zahlen> Listentrennzeichen [Wechsel vom Komma zu Ihrer bevorzugten Alternative]. Das bedeutet, dass Excel standardmäßig auch CSVs mit dem ausgewählten Trennzeichen exportiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.