Analysiert der TSV-Datei
Muss ich parse eine Datei im TSV-format (tab-separierte Werte). Ich habe einen regex verwenden, brechen Sie die Datei in jeder Zeile, aber ich kann nicht finden, eine Befriedigung zu Parsen jeder Zeile.
Für jetzt habe ich dieses:
(?<g>("[^"]+")+|[^\t]+)
Aber es funktioniert nicht, wenn ein Element in der Zeile hat mehr als 2 aufeinander folgende doppelte Anführungszeichen.
Hier ist, wie die Datei formatiert ist: jedes element wird getrennt durch einen Tabulator. Wenn ein Element enthält eine Registerkarte, es ist eingeschlossen in Anführungszeichen ein. Wenn ein Element enthält, ein doppeltes Anführungszeichen, es wird verdoppelt. Aber manchmal ein element enthält 4 conscutive doppelte Anführungszeichen, und die oben genannten regex spaltet sich das element in 2 verschiedene.
Beispiele:
item1ok "item","2","oK"
ist richtig analysiert wird in 2 Elementen: item1ok und Element"2"ok (nach dem trimmen den unnötigen Anführungszeichen), aber:
item1oK "item""""2oK"
wird analysiert, in 3 Elemente: item1ok, Element und "2ok (nach dem trimmen wieder).
Hat jemand eine Idee, wie die regex passen in diesem Fall? Oder gibt es eine andere Lösung zu analysieren TSV einfach? (Dies mache ich in C#).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie die TextFieldParser. Dies ist technisch ein VB-Montage, Sie kann aber auch in C# durch einen Verweis auf die
Microsoft.VisualBasic.FileIO
Montage.Sich das Beispiel im link oben zeigt auch die Verwendung auf einer tab-getrennten Datei.
Anstatt zu versuchen, bauen Sie Ihre eigenen CSV/TSV-Datei-parser (oder Zeichenfolge verwenden.Split), würd ich dir empfehlen einen Blick auf "Fast CSV Reader" oder "FileHelpers Bibliothek".
Bin ich mit dem ersten eine, und bin sehr glücklich mit ihm (er unterstützt eine beliebige Trennzeichen wie z.B. Komma, Semikolon, tab).
Statt mit RegEx, vielleicht könnten Sie versuchen, die String.Split-Methode (Char[])
Methode.
Weiß ich nicht C#, aber das sollte den trick tun (in python)