|
Eine andere Art und Weise der Ersetzung von Zeichen bzw. Teil-Strings in einem String stellt die folgende Funktion ReplaceMasked dar. Sie ersetzt alle Zeichen, die sich zwischen den Vorkommen eines gegebenen Teil- bzw. Trenn-Strings befinden, durch ein festes anderes, vorgegebenes Zeichen. So würden etwa in einem Datums-String alle Ziffern durch eine Null ersetzt, während die trennenden Punkte erhalten blieben.
In der Funktion wird zunächst ein neuer String (gleich als Rückgabewert) angelegt, der bei gleicher Länge wie der übergebenen String (Str) nur aus Maskierungszeichen (Mask) besteht. An den Positionen der Vorkommen des Trenn-Strings (Separator) werden im Rückgabe-String die entsprechenden Masken-Zeichen durch den Trenn-String ersetzt.
Public Function ReplaceMasked(Str As String, Mask As String, _
Separator As String) As String
Dim nPos As Long
Dim nStart As Long
Dim nLenSeparator As Long
ReplaceMasked = String$(Len(Str), Mask)
nLenSeparator = Len(Separator)
nStart = 1
Do
nPos = InStr(nStart, Str, Separator)
If nPos Then
Mid$(ReplaceMasked, nPos) = Separator
nStart = nPos + nLenSeparator
End If
Loop While nPos
End Function
Nach dem gleichen Prinzip ersetzt die folgende Funktion FilterMasked alle Zeichen aus dem übergebenen String (Str), die nicht zu einem in Matches übergebenen Array von Strings enthalten sind, durch ein Maskierungszeichen. Umgekehrt gesagt: Die Funktion gibt einen String zurück, der an den entsprechenden Positionen nur noch Teil-Strings enthält, die in Matches in einem Array übergeben worden sind.
Public Function FilterMasked(Str As String, Matches As Variant, _
Optional Mask As String = " ") As String
Dim nPos As Long
Dim nStart As Long
Dim nSeparator As String
Dim nLenSeparator As Long
Dim l As Long
FilterMasked = String$(Len(Str), nMask)
For l = LBound(Matches) To UBound(Matches)
nSeparator = Matches(l)
nLenSeparator = Len(nSeparator)
nStart = 1
Do
nPos = InStr(nStart, Str, nSeparator)
If nPos Then
Mid$(FilterMasked, nPos) = nSeparator
nStart = nPos + nLenSeparator
End If
Loop While nPos
Next 'l
End Function
|