vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Variablen/Strings   |   VB-Versionen: VB2005, VB2008, VB201006.12.12
Split-Funktion mit genauer Angabe der Splitposition

Die Funktion ist eine Erweiterung der orginalen Splitfunktion von VB. Hiermit ist es möglich, den String an einer bestimmten Stelle des Vorkommens des Delimiters zu trennen.

Autor:   DierkBewertung:     [ Jetzt bewerten ]Views:  5.657 
ohne HomepageSystem:  WinXP, Vista, Win7, Win8, Win10kein Beispielprojekt 

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 5.657 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel