2009-06-06 8 views
3

Wie würde ich die folgende Zeichenfolge teilen?Split CSV String

test, 7535, '1,830,000', '5,000,000' 

Das Ergebnis

test 
7535 
'1,830,000' 
'5,000,000' 

sein sollte ich versuchen:

Dim S() as string = mystring.split(",") 

Aber ich werde,

test 
7535 
'1 
830 
000' 
'5 
000 
000' 

Dank

Antwort

8

CSV nicht manuell analysieren, wenn Sie das handliche good quality libraries available haben. Bitte!

CSV-Parsing hat viele viele mögliche Fallstricke und diese Bibliothek, nach meinen Tests, löst die meisten von ihnen sauber.

Das heißt, wenn dies eine einmalige Aufgabe ist und die Saiten sind immer wie Ihr Beispiel, Sie regex, wie diese (VB.NET Syntax, bitte beheben könnte falsch sein) verwenden können:

 Dim s as string = "1, 2, '1,233,333', '8,444,555'"; 
     Dim r as Regex = new Regex(",\s"); 
     Dim re() as string = r.Split(s); 

Dies setzt voraus, dass hinter dem Trennkomma immer ein Leerzeichen steht und dass in den Kommas zwischen den Zahlen kein Leerzeichen steht. Wenn das nicht immer der Fall, können Sie:

  • Machen Sie den regulären Ausdruck komplexer (aussehen here zu sehen, wie chaotisch die Dinge könnten)
  • Verwenden Sie die Bibliothek und glücklicher sein
+1

Ich bin nicht einverstanden über die Notwendigkeit, eine CSV-Bibliothek unbedingt zu verwenden. Wenn Sie wissen, dass die CSV-Datei gut formatiert ist, wird eine einfache Methode mit ReadLine und Split die Arbeit perfekt erledigen. – Noldorin

+0

In dieser Situation ist es jedoch in der Tat ratsam, da in Feldern Komma-getrennte Zahlen vorhanden sind. – Noldorin

+2

Also, mit anderen Worten, Sie sagen, dass Sie völlig mit mir einverstanden sind :) –

1
Dim words as New List(Of String)() 
Dim inQuotes as Boolean 
Dim thisWord as String 
For Each c as Char in String 
    If c = "'"c Then inQuotes = Not inQuotes 
    If c = ","c AndAlso Not inQuotes Then 
     words.Add(thisWord) 
     thisWord = Nothing 
    Else 
     thisWord &= c 
    End If 
Next 
0

Try Um diese RegExp zu verwenden: "('([^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?"

1

Wenn nur für dieses Beispiel, regexp, die Split-Funktion (Mitglied von Microsoft.VisualBasic.Strings) kann eine Zeichenkette als Trennzeichen nehmen, also geben Sie einfach "," ein, um nur diese Kommas mit Leerzeichen zu fangen nach:

Dim s As String = "1, 2, '1,233,333', '8,444,555'" 
    Dim r() As String = Split(s, ", ")