regex split line (csv-Datei)
Ich bin nicht gut in regex. Kann jemand mir helfen heraus zu schreiben, regex für mich?
Vielleicht habe ich Werte, wie dies beim Einlesen der csv-Datei.
"Künstler,Name,Album,12-SCS "val""u,e1",Wert2,Wert3
Ausgabe:
Künstler,Name Album 12-SCS Val"u,e1 Wert2 Wert3
Update:
Ich mag die Idee mit Oledb-provider. Wir haben die Datei-upload-Steuerelement auf der web-Seite, die ich Lesen Sie den Inhalt der Datei, die mit stream reader ohne eigentlichen speichern der Datei auf dem Dateisystem. Gibt es eine Möglichkeit, ich kann Benutzer-Oledb-provider, weil wir müssen, geben Sie die Datei Namen in der Verbindungszeichenfolge und in meinem Fall habe ich nicht die Datei auf dem Dateisystem.
- das wird schwierig sein, mit einem regex, haben Sie sich überlegt-Analyse mit einem finite-state-Maschine statt?
- regex.info/blog/2006-09-15/247
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur das hinzufügen der Lösung, die ich arbeitete an diesem morgen.
Wie Sie sehen können, müssen Sie rufen regex.Matches() pro Zeile. Es wird dann wieder ein MatchCollection-mit der gleichen Anzahl von Elementen, die man als Spalten. Die Value-Eigenschaft jedes match ist, offensichtlich, der Analysierte Wert.
Dies ist immer noch ein work in progress, aber es gerne analysiert CSV-Zeichenfolgen wie:
field1,"""",field2
.Eigentlich ziemlich einfach zu passen CVS-Linien mit einer regex. Probieren Sie es einfach aus:
Haftungsausschluss: Die regex getestet wurde in RegexBuddy, (die erzeugten snippet), und es richtig passt die OP-test-Daten, aber der C# - code-Logik nicht getestet ist. (Ich habe keinen Zugriff auf C# - tools).
Regex ist nicht das geeignete Werkzeug für diese. Verwenden Sie eine CSV - parser. Entweder die builtin eine oder 3rd party ein.
CsvReader
Klasse in der 3rd-party code ist 2500 Zeilen lang und hat viele schlecht geschriebene Funktionen, also debugging ist mühsam, wie gut. Spaß haben!Geben die TextFieldParser Klasse einen Blick. Es ist in der Microsoft.VisualBasic assembly und hat mit Trennzeichen und fester Breite analysieren.
Geben CsvHelper versuchen (eine Bibliothek, die ich erhalten). Es ist erhältlich über NuGet.
Können Sie leicht Lesen einer CSV-Datei in einer benutzerdefinierten Klasse Sammlung. Es ist auch sehr schnell.
Regex könnte zu Komplex hier. Teilen Sie die Linie auf Kommas und iteriere über die daraus resultierenden bits und verketten Sie Sie, wo "die Anzahl der doppelten Anführungszeichen in die verkettete Zeichenfolge" ist das auch nicht.
"Hallo,hier","ein ""test"""
...split...
"Hallo | das" ist | | "ein ""test"""
...Durchlaufen und merge 'til Sie haben eine gerade Anzahl von Anführungszeichen...
"Hallo,hier" - sogar die Anzahl der Zitate (Hinweis: Komma entfernt von split eingefügt zwischen bits)
ist - sogar die Anzahl der Zitate
"ein ""test""" - sogar die Anzahl der Zitate
...dann Streifen der führende und nachgestellte Zitat, falls vorhanden, und ersetzen Sie "" mit ".
Könnte es getan werden, verwenden Sie folgenden code: