Gegeben
2,1016,7 / 31/2008 14: 22, Geoff Dalgas , 6/5/2011 22:21, http://stackoverflow.com , "Corvallis, OR", 7679,351,81, b437f461b3fd27387c5d8ab47a293d35,34
So verwenden Sie C #, um die obigen Informationen wie folgt in Zeichenfolgen aufzuteilen:
2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
Wie Sie sehen können, enthält eine der Spalten <= (Corvallis, OR)
// update // Basierend auf C # Regex Split - Kommas außerhalb von Anführungszeichen
string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Antworten:
Verwenden Sie die
Microsoft.VisualBasic.FileIO.TextFieldParser
Klasse. Dies behandelt das Parsen einer durch Trennzeichen getrennten DateiTextReader
oderStream
wenn einige Felder in Anführungszeichen eingeschlossen sind und andere nicht.Beispielsweise:
Dies sollte zu folgender Ausgabe führen:
Weitere Informationen finden Sie unter Microsoft.VisualBasic.FileIO.TextFieldParser .
Sie müssen einen Verweis auf
Microsoft.VisualBasic
der Registerkarte Verweise hinzufügen .NET hinzufügen .quelle
Es ist so viel spät, aber das kann für jemanden hilfreich sein. Wir können RegEx als Balg verwenden.
quelle
,
\" df“,Sie können alle Kommas aufteilen, denen eine gerade Anzahl von Anführungszeichen folgt.
Sie möchten auch im
specf
for CSV-Format Informationen zum Umgang mit Kommas anzeigen .Nützlicher Link:
C# Regex Split - commas outside quotes
quelle
Ich sehe, wenn Sie CSV-getrennten Text in Excel einfügen und einen "Text in Spalten" ausführen, werden Sie nach einem "Textqualifizierer" gefragt. Standardmäßig wird ein doppeltes Anführungszeichen verwendet, damit Text in doppelten Anführungszeichen als Literal behandelt wird. Ich stelle mir vor, dass Excel dies implementiert, indem es jeweils ein Zeichen nach dem anderen verwendet. Wenn es auf ein "Textqualifikationsmerkmal" stößt, geht es weiter zum nächsten "Qualifikationsmerkmal". Sie können dies wahrscheinlich selbst mit einer for-Schleife und einem Booleschen Wert implementieren, um anzugeben, ob Sie sich in wörtlichem Text befinden.
quelle
Verwenden Sie eine Bibliothek wie LumenWorks , um Ihre CSV-Lesung durchzuführen . Es verarbeitet Felder mit Anführungszeichen und ist wahrscheinlich insgesamt robuster als Ihre benutzerdefinierte Lösung, da es sie schon lange gibt.
quelle
Es ist schwierig, CSV-Dateien zu analysieren, wenn die CSV-Datei entweder durch Kommas getrennte Zeichenfolgen, durch Kommas getrennte Zeichenfolgen in Anführungszeichen oder eine chaotische Kombination der beiden sein kann. Die von mir entwickelte Lösung ermöglicht eine der drei Möglichkeiten.
Ich habe eine Methode erstellt, ParseCsvRow (), die ein Array aus einer CSV-Zeichenfolge zurückgibt. Ich beschäftige mich zuerst mit doppelten Anführungszeichen in der Zeichenfolge, indem ich die Zeichenfolge in doppelte Anführungszeichen in ein Array namens quoteArray aufteile. CSV-Dateien mit Anführungszeichen sind nur gültig, wenn eine gerade Anzahl von doppelten Anführungszeichen vorhanden ist. Doppelte Anführungszeichen in einem Spaltenwert sollten durch ein Paar doppelter Anführungszeichen ersetzt werden (dies ist der Ansatz von Excel). Solange die CSV-Datei diese Anforderungen erfüllt, können Sie davon ausgehen, dass die Trennzeichen nur außerhalb von doppelten Anführungszeichen angezeigt werden. Kommas in doppelten Anführungszeichen sind Teil des Spaltenwerts und sollten beim Aufteilen der CSV-Datei in ein Array ignoriert werden.
Meine Methode prüft Kommas außerhalb von Paaren mit doppelten Anführungszeichen, indem sie nur gerade Indizes des Anführungszeichenarrays betrachtet. Außerdem werden doppelte Anführungszeichen am Anfang und am Ende von Spaltenwerten entfernt.
Ein Nachteil meines Ansatzes ist die Art und Weise, wie ich Trennzeichen vorübergehend durch ein obskures Unicode-Zeichen ersetze. Dieses Zeichen muss so dunkel sein, dass es niemals in Ihrer CSV-Datei angezeigt wird. Möglicherweise möchten Sie dies besser behandeln.
quelle
Ich hatte ein Problem mit einer CSV, die Felder mit einem Anführungszeichen enthält. Daher habe ich mit TextFieldParser Folgendes gefunden:
Ein StreamReader wird weiterhin verwendet, um die CSV wie folgt zeilenweise zu lesen:
quelle
Mit Cinchoo ETL - einer Open Source-Bibliothek - können Spaltenwerte , die Trennzeichen enthalten, automatisch verarbeitet werden.
Ausgabe:
Weitere Informationen finden Sie im Artikel zum Codeprojekt.
Ich hoffe es hilft.
quelle