PDA

Vollständige Version anzeigen : Verschiedene Zeichen durch ein Zeichen ersetzen


markusxy
07.10.2018, 12:18
Da die Textverarbeitung mit Funktionen wie Replace$, Mid$ usw sehr langsam arbeitet, hier mal ein Beispiel wie man eine Reihe von Einzelzeichen performant durch ein Zeichen ersetzen kann.



'die notwendige API Deklaration um das erste Vorkommen eine Reihe von Einzelzeichen in einem Text zu erhalten
Private Declare PtrSafe Function StrCSpnW Lib "Shlwapi" (ByVal StrAdr As LongPtr, ByVal CharsetAdr As LongPtr) As Long


Function ReplaceMultiCharByOne(ByRef Source As String, ByRef CharsToReplace As String, ByRef ReplaceBy As String) As String
Dim AdrCharSet As LongPtr
Dim AdrString As LongPtr
Dim pos As Long
Dim LenString As Long

'init
If Len(ReplaceBy) <> 1 Then Err.Raise 888, , "ReplaceBy must be one figure"

ReplaceMultiCharByOne = Source
LenString = Len(Source) + 1
AdrString = StrPtr(ReplaceMultiCharByOne)
AdrCharSet = StrPtr(CharsToReplace)


pos = StrCSpnW(AdrString, AdrCharSet) + 1
Do Until pos = LenString

Mid(ReplaceMultiCharByOne, pos, 1) = ReplaceBy
pos = StrCSpnW(AdrString + pos * 2, AdrCharSet) + pos + 1
Loop

End Function



Aufruf aus dem Direktbereich:

?ReplaceMultiCharByOne("+ab@cd+", "+*@", "_")
_ab_cd_