Here's my version of a trim with multiple characters:
Code: Select all
Procedure.s MTrim(string.s, character.s = " ")
Protected firstChar, lastChar, numChars, *ptrString.character
lastChar = Len(string)
If lastChar > 0
*ptrString = @string + lastChar - 1
While FindString(character, Chr(*ptrString\c))
lastChar - 1
If lastChar = 0
ProcedureReturn ""
EndIf
*ptrString - SizeOf(character)
Wend
numChars = lastChar
*ptrString = @string
For firstChar = 1 To lastChar
If Not FindString(character, Chr(*ptrString\c))
Break ;always exits loop here
EndIf
numChars - 1
*ptrString + SizeOf(character)
Next
ProcedureReturn Mid(string, firstChar, numChars)
EndIf
EndProcedure
From my own tests it is faster than the other PureBasic examples when tested with these examples:
Code: Select all
);before, middle, after ;basic test
MTrim("<>abcd<>e><", "><")
;empty search string
MTrim("", "><")
;long search string, empty character string
MTrim("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", "")
; long search string, minimal character string
MTrim("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", "<")
;minimal search and character string
MTrim("<", ">")
;long character string
MTrim("<", "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz")