ReplaceChar – A faster version of VB6’s Replace function, for single-char replacements

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As _    Any, pSrc As Any, ByVal ByteLen As Long)' This is a replacement for the "Replace" function provided by VB6,'  though for single character replacements only. The speed difference varies,'  depending on how many characters it needs to replace / the length of the ' string, but the ReplaceChar function has been found to go from approximately ' 1.3 times to 10 times (possibly even more depending) faster. Another point ' worth mentioning is if you check the "Assume No Aliasing" and/or the "Remove ' Array Bounds Checks" compiler options, the routine will go faster.'' Example:'    Dim sInput As String'    sInput = "This is a test string"'    MsgBox (ReplaceChar(sInput, "s", "*"))Function ReplaceChar(ByVal strExpression As String, ByVal findChar As String, _    ByVal replChar As String) As String    Dim arrByte() As Byte, lngUB As Long, lngLoop As Long    Dim bytFind As Byte, bytReplace As Byte        ' convert the two characters to byte    bytFind = Asc(findChar)    bytReplace = Asc(replChar)    ' get length of string in bytes, and convert to byte array    lngUB = LenB(strExpression)    ReDim arrByte(lngUB - 1) As Byte    CopyMemory arrByte(0), ByVal StrPtr(strExpression), lngUB        ' swap characters    For lngLoop = 0 To lngUB - 1 Step 2        If arrByte(lngLoop) = bytFind Then arrByte(lngLoop) = bytReplace    Next        ' convert back to string    ReplaceChar = Space$(lngUB  2)    CopyMemory ByVal StrPtr(ReplaceChar), arrByte(0), lngUBEnd Function' If you liked this routine pay a visit to the author's website at http://' shadowdc.sourceforge.net/

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: