Oftmals ist es gewünscht, einen String an einer ganz bestimmten Stelle (Vorkommen eines Trenners) einfach in 2 Teile zu splitten. Ich z.b. brauche es oft um einen Pfad am letzten "\" zu trennen oder um Bytefolgen zu splitten. Damit nicht ständig zwischen der originalen "Split Funktion" und der eigenen umgedacht werden muss, ist diese Funktion so ausgelegt, dass sie sich im Zweifelsfall wie die originale Funktion verhält. ''' <summary> ''' Gibt ein nullbasiertes, eindimensionales Array zurück, bei dem die Position des ''' Delimiter frei gewählt werden kann ''' </summary> ''' <param name="Expression">Erforderlich. String-Ausdruck mit untergeordneten ''' Zeichenfolgen und Trennzeichen</param> ''' <param name="Delimiter">Optional. Jedes einzelne Zeichen, mit dem Grenzen von ''' untergeordneten Zeichenfolgen gekennzeichnet werden. ''' Wenn Delimiter nicht angegeben wird, wird als Trennzeichen das ''' Leerzeichen (" ") angenommen.</param> ''' <param name="Limit">Optional. Die maximale Anzahl von untergeordneten Zeichenfolgen, ''' in die die Eingabezeichenfolge geteilt werden soll. ''' Der Standardwert -1 gibt an, dass die Eingabezeichenfolge an jedem Vorkommen der ''' Delimiter-Zeichenfolge geteilt werden soll. ''' Bei Eingabe einer "Position", wird "Limit" überschrieben.</param> ''' <param name="Compare">Optional. Numerischer Wert, der den Vergleich angibt, der für ''' das Auswerten von untergeordneten Zeichenfolgen verwendet wird. ''' Werte finden sie im Abschnitt "Einstellungen"</param> ''' <param name="Position">Optional. Die Position des Delimiter an der die ''' Eingabezeichenfolge getrennt werden soll. ''' Der Standardwert -1 trennt die Eingabezeichenfolge am letzten Vorkommen. ''' Eine Eingabe der Position hebt die Eingabe eines "Limit" auf.</param> ''' <returns></returns> ''' <remarks></remarks> Public Function SplitOn(ByVal Expression As String, _ Optional ByVal Delimiter As String = " ", _ Optional ByVal Limit As Integer = -1, _ Optional ByVal Compare As Microsoft.VisualBasic.CompareMethod = CompareMethod.Binary, _ Optional ByVal Position As Integer = 0) As String() Dim s() As String = {"", ""} Try ' Wird keine Position angegeben, gibt die Funktion das selbe ' wie die normale "Split" funktion in VB zurück If Position = 0 Then Return Split(Expression, Delimiter, Limit, Compare) Else Dim c As Integer = 0 Dim p As Integer = 0 ' Anzahl der Vorkommen des Delimmiter zählen Do p = InStr(p + 1, Expression, Delimiter, Compare) ' solange ein Delimiter grfunden wird, den Zähler um 1 erhöhen If p > 0 Then c += 1 Loop Until p = 0 ' Wenn der Delimiter midestens sooft vorkommt, wie die ' gewünschte Position es will. ' Sollte dies nicht der Fall sein, wird ein Array, wie ' oben s() dimensioniert zurückgegeben If c >= System.Math.Abs(Position) Then ' neue Variable um zu sehen wann die gewünschte Position erreicht wurde Dim Cut As Integer = Position ' bei negativer Position (also zählen von hinten) ' müssen wir noch kurz umrechnen If Position < 0 Then Cut = (c - System.Math.Abs(Position)) + 1 c = 0 Do ' Position des nächsten Delimiter suchen p = InStr(p + 1, Expression, Delimiter, Compare) ' wenn gefundene Position größer 0 den Zähler um 1 erhöhen If p > 0 Then c += 1 ' vergleichen, ob Zähler und gewünschte Trennposition übereinstimmen If c = Cut Then ' wenn ja, wird aufgeteilt s(0) = Mid(Expression, 1, p - 1) s(1) = Mid(Expression, p + 1) ' und so getan als wäre nichts mehr gefunden worden p = 0 End If ' ansonsten gehts einfach weiter, bis nichts mehr gefunden wurde Loop Until p = 0 End If End If Catch ex As Exception MsgBox("Irgendetwas ist danebengegangen!") End Try Return s End Function Dieser Tipp wurde bereits 8.064 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |