Die Split-Funktion zur Zerlegung eines Strings steht leider erst
ab Visual Basic 6 zur Verfügung. Die hier vorgestellte
Funktion Split dient als Ersatz zur Verwendung in Visual Basic
5 und verfügt über die gleichen Parameter und das gleiche
Verhalten wie die VB 6-Version.
Sie übergeben ihr im Parameter Expression den zu zerlegenden
Text-String und im Parameter Delimiter den Trenn-String. Der
Trenn-String ist die Zeichenkette, die die Trennung zwischen den
Bestandteilen des Text-Strings darstellt. Sie kann beliebiger Länge
sein. Voreingestellt ist ein Leerzeichen.
Der optionale Parameter Limit gibt an, in wie viele Teile der
übergebene Text-String maximal zerlegt werden soll. Wird er
weggelassen (Voreinstellung = -1), wird der Text-String
vollständig zerlegt. Anderenfalls werden nur entsprechend viele
Teile zurückgegeben, wobei das letzte Element des zurückgegebenen
Arrays den Rest des nicht weiter zerlegten Strings enthält.
Beispiel:
Dim Text As String
Dim Parts As Variant
Dim Part As Variant
Text = "a b c d e f"
Parts = Split(Text, , 3)
For Each Part In Parts
Debug.Print Part
Next
ergibt:
a
b
c d e f
Wird als Limit der Wert 0 übergeben, schafft es die
originale Split-Funktion in VB 6 auf obskure Weise, ein
"Array" zurückzugeben, das 0 als Untergrenze
und -1 als Obergrenze zu haben scheint. Da wir diesen
"Effekt" nicht nachbilden können, gibt der Nachbau der
Split-Funktion ein Array mit -1 als Untergrenze als
auch als Obergrenze zurück. Sie können daher sowohl in VB 5
als auch in VB 6 prüfen, ob die Obergrenze -1
ist, und somit feststellen, ob das zurückgegebene Array überhaupt
regulär Werte enthält.
Im optionalen Parameter Compare geben Sie den Vergleichsmodus zur
Suche nach den Trenn-Strings an.
Zur Verbesserung der Geschwindigkeit wird das in der Funktion
dimensionierte Array nicht für jede Fundstelle separat um 1
Element vergrößert, sondern vorausschauend in größeren
Schritten. Die Schrittweite können Sie im optionalen Parameter
PreDim angeben (Voreinstellung 20). Vor der Zuweisung
des Arrays als Rückgabewert der Funktion wird es gegebenenfalls auf
die tatsächliche Anzahl der Elemente zurück "gestutzt".
Dieser Parameter existiert nicht bei der Split-Funktion in VB
6.
Public Function Split(Expression As String, _
Optional Delimiter As String = " ", _
Optional ByVal Limit As Long = -1, _
Optional ByVal Compare As VbCompareMethod = vbBinaryCompare, _
Optional ByVal PreDim As Long = 20) As Variant
Dim nPos As Long
Dim nStart As Long
Dim nDelimiterLen As Long
Dim nParts() As String
Dim nPartsCount As Long
Dim nLimit As Long
Select Case Limit
Case 0
ReDim nParts(-1 To -1)
Split = nParts
Exit Function
Case Is > 0
nLimit = Limit - 1
Case Else
nLimit = PreDim - 1
End Select
ReDim nParts(0 To nLimit)
nDelimiterLen = Len(Delimiter)
nStart = 1
Do
nPos = InStr(nStart, Expression, Delimiter, Compare)
If nPos Then
nParts(nPartsCount) = Mid$(Expression, nStart, nPos - nStart)
nStart = nPos + nDelimiterLen
nPartsCount = nPartsCount + 1
If nPartsCount > UBound(nParts) Then
If Limit = -1 Then
nLimit = nLimit + PreDim
End If
ReDim Preserve nParts(0 To UBound(nParts) + nLimit)
End If
Else
nParts(nPartsCount) = Mid$(Expression, nStart)
Exit Do
End If
If nPartsCount >= nLimit Then
nParts(nPartsCount) = Mid$(Expression, nStart)
Exit Do
End If
Loop
If UBound(nParts) > nPartsCount Then
ReDim Preserve nParts(0 To nPartsCount)
End If
Split = nParts
End Function
 |
Die Funktion Split dient in Visual Basic
5 als Ersatz für die in Visual Basic 6
vorhandene Split-Funktion

|
Alternativ zur Zerlegung eines Text-Strings in ein Array wird von
der auch in VB 6 nicht vorhandenen Funktion
SplitToCollection eine Collection anstelle des Arrays
zurückgegeben. Wird ihr als Limit der Wert 0
übergeben, erhalten Sie eine leere Collection zurück. Ansonsten
haben die Parameter die gleiche Funktion und Wirkung.
Public Function SplitToCollection(Expression As String, _
Optional Delimiter As String = " ", _
Optional ByVal Limit As Long = -1, _
Optional ByVal Compare As VbCompareMethod = vbBinaryCompare) _
As Collection
Dim nPos As Long
Dim nStart As Long
Dim nDelimiterLen As Long
Dim nParts As Collection
Dim nPartsCount As Long
Dim nLimit As Long
Set nParts = New Collection
If Limit = 0 Then
Set SplitToCollection = nParts
Exit Function
End If
nLimit = Limit - 1
nDelimiterLen = Len(Delimiter)
nStart = 1
With nParts
Do
nPos = InStr(nStart, Expression, Delimiter, Compare)
If nPos Then
nParts.Add Mid$(Expression, nStart, nPos - nStart)
nStart = nPos + nDelimiterLen
Else
nParts.Add Mid$(Expression, nStart)
Exit Do
End If
Select Case nLimit
Case Is < 0
Case Is <= .Count
nParts.Add Mid$(Expression, nStart)
Exit Do
End Select
Loop
End With
Set SplitToCollection = nParts
End Function
 |
Auch in Visual Basic 6 nicht vorhanden: Die
Funktion SplitToCollection zerlegt einen String und gibt eine
Collection anstelle eines Arrays zurück

|

|