Aufteilen von CSV-Spalten mit eingebetteten Kommas in C#
CSV-Dateien verwenden normalerweise Kommas, um Spalten zu trennen. Allerdings können einige Spalten selbst Kommas enthalten, was beim Aufteilen von CSV-Daten in verschiedene Zeichenfolgen zu Problemen führen kann.
Frage:
Gegebene CSV-Zeile:
<code>2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,"Corvallis, OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34</code>
Wie kann ich diese Zeile in ein Array von Zeichenfolgen aufteilen, um sicherzustellen, dass der Text „Corvallis, OR“ in einem Feld verbleibt?
Lösung:
Der bereitgestellte reguläre Ausdruck funktioniert nur bei CSV-Daten, bei denen alle Kommas außerhalb oder innerhalb von Anführungszeichen stehen. Um dieses Problem zu lösen, sollten Sie die Verwendung der Microsoft.VisualBasic.FileIO
-Klassen im TextFieldParser
-Namespace in Betracht ziehen. Diese Klasse ist für die Verarbeitung von durch Trennzeichen getrennten Dateien konzipiert, bei denen einige Felder in Anführungszeichen gesetzt sind und andere nicht.
Code:
<code class="language-csharp">using Microsoft.VisualBasic.FileIO; // ... string csv = "2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,\"Corvallis, OR\",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34"; using (TextFieldParser parser = new TextFieldParser(new StringReader(csv))) { parser.HasFieldsEnclosedInQuotes = true; parser.SetDelimiters(","); while (!parser.EndOfData) { string[] fields = parser.ReadFields(); foreach (string field in fields) { Console.WriteLine(field); } } }</code>
Ausgabe:
<code>2 1016 7/31/2008 14:22 Geoff Dalgas 6/5/2011 22:21 http://stackoverflow.com Corvallis, OR 7679 351 81 b437f461b3fd27387c5d8ab47a293d35 34</code>
Hinweis:
Wenn Sie TextFieldParser
verwenden, müssen Sie auf der Registerkarte „Referenz.NET hinzufügen“ einen Verweis auf Microsoft.VisualBasic
hinzufügen. Der Code verwendet außerdem die using
-Anweisung, um sicherzustellen, dass TextFieldParser
korrekt geschlossen wird.
Das obige ist der detaillierte Inhalt vonWie teilt man CSV-Spalten mit eingebetteten Kommas in C# richtig auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!