Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: VB6
Expertise: Advanced
Sep 15, 2003

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
    ' convert back to string
    ReplaceChar = Space$(lngUB \ 2)
    CopyMemory ByVal StrPtr(ReplaceChar), arrByte(0), lngUB
End Function

' If you liked this routine pay a visit to the author's website at http://
' shadowdc.sourceforge.net/
Andrew Osmond
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date