[vb.net] Split mit mehreren Delimiter
Gepostet am: Apr 13, 2011 2:59:8 PM
Es gibt grundsätzlich mehrere Möglichkeiten, einen String mit mehreren Delimitern zu trennen
Es ist von VB.NET dies grundsätzlich von sich aus möglich, wenn man den Split-Befehl folgendermaßen verwendet
Textfeld
Dim sString as String = "....."Dim args as String() = sString.Split(New String() {"/","_",":"}, Nothing)
Mittels einer eigenen Funktion, die die unterschiedlichen Delimiter zu einem zusammenfasst (bzw. durch einen gemeinsamen ersetzt) [Anmerkung: Fragt mich nicht, warum ich diesen Befehl in meiner CodeSchnippselsammlung habe. Vermutlich war das mit früheren Versionen irgendwann mal nicht möglich]
Multisplit
Private Function MultiSplit(ByVal StringToParse As String, ByVal Delimiter() As String, Optional ByVal trimmode As Integer = 0) As String() ' Diese Funktion zerlegt einen eingegebenen Text mit beliebige vielen Delimitern als String Array ' Es wird ein Array zurückgegeben, welches die gefundenen Elemente enthält. ' werden die Delimiter mit einem \ übergeben, werden sie ignoriert ' Bsp: Multisplit("zer|leg/e_mich",{"|","/","_"}) Dim a As Integer = 1 ' Ermitteln einer Zeichenkette, die im Text nie vorkommt Dim replacetext As String = " " 'ein String, der so gut wie in in einem Text vorkommt Do For i As Integer = 128 To 255 'durchlaufe die Character 128-255 If Not (StringToParse.Contains(Chr(i))) Then 'Teste ob der Char vorkommt replacetext = replacetext & Chr(i) 'setzte das Zeichen, das nicht vorkommt als neuen Delimiter Exit For End If Next If Not (Len(replacetext) > a) Then 'prüfen, ob sich der String überhaupt verändert hat replacetext = replacetext & Chr(142) a = a + 1 End If Loop Until Not (StringToParse.Contains(Trim(replacetext))) 'durchlaufe den Text solange, bis er nicht gefunden wird replacetext = Trim(replacetext) 'Leerzeichen entfernen 'Hauptfunktion For Each Element As String In Delimiter StringToParse = Replace(StringToParse, Element, replacetext) 'die eigentlichen Delimiter durch den neuen ersetzen Next Dim mySplit As String() = Split(StringToParse, replacetext) ' nun der eigentliche Splitvorgang ' gegebenenfalls noch trimmen If trimmode <> 0 Then 'sofern nicht nicht getrimmt werden soll For Each Element As String In mySplit 'den neuen Array durchlaufen Select Case trimmode Case 1 Element = LTrim(Element) Case 2 Element = RTrim(Element) Case 3 Element = Trim(Element) End Select Next End If Return mySplit End Function
Als dritte Möglichkeit möchte ich die Verwendung von Regulären Ausdrücken erwähnen: Regex.Split