Code: Select all
EnableExplicit
Procedure.s RTrimWS(String$)
Protected whitespace$, Len1, Len2, Blen, Find, i, j
Protected *mem, *memWS, *c.Character, *jc.Character
whitespace$ = #CRLF$ + #TAB$ + #FF$ + #VT$ + " "
Len1 = Len(whitespace$) ; set explicitly 6
Len2 = Len(String$)
Blen = StringByteLength(String$)
If Not Asc(String$)
ProcedureReturn ""
EndIf
*mem = @String$
*memWS = @whitespace$
*c.Character = *mem + Blen - SizeOf(Character)
For i = Len2 To 1 Step -1
Find = 1
*jc.Character = *memWS
For j = 1 To Len1 ; set explicitly 6
If *c\c = *jc\c
Len2 - 1
Find = 0
Break
EndIf
*jc + SizeOf(Character)
Next
If Find
*c + SizeOf(Character)
*c\c = 0
Break
EndIf
*c - SizeOf(Character)
Next
; String$ = Left(String$, Len2)
ProcedureReturn String$
EndProcedure
Define String$ = "test" + #CRLF$ + #CRLF$ + #CRLF$ + #TAB$ + #FF$ + #VT$ + " "
Debug "|" + RTrimWS(String$) + "|"
You can set your own character set
Code: Select all
EnableExplicit
; https://www.purebasic.fr/english/viewtopic.php?t=79183
Procedure.s RTrimChar(String$, TrimChar$ = #CRLF$ + #TAB$ + #FF$ + #VT$ + " ")
Protected Len2, Blen, i
Protected *memChar, *c.Character, *jc.Character
Len2 = Len(String$)
Blen = StringByteLength(String$)
If Not Asc(String$)
ProcedureReturn ""
EndIf
*c.Character = @String$ + Blen - SizeOf(Character)
*memChar = @TrimChar$
For i = Len2 To 1 Step - 1
*jc.Character = *memChar
While *jc\c
If *c\c = *jc\c
*c\c = 0
Break
EndIf
*jc + SizeOf(Character)
Wend
If *c\c
Break
EndIf
*c - SizeOf(Character)
Next
ProcedureReturn String$
EndProcedure
Define String$
String$ = "test" + #CRLF$ + #CRLF$ + #CRLF$ + #TAB$ + #FF$ + #VT$ + " "
Debug "|" + RTrimChar(String$) + "|"
String$ = "C:\folder" + "\/\/\/\/"
Debug "|" + RTrimChar(String$, "\/") + "|"
String$ = #CRLF$ + #CRLF$ + #CRLF$ + #TAB$ + #FF$ + #VT$ + " "
Debug "|" + RTrimChar(String$) + "|"
Delete Left
Code: Select all
EnableExplicit
; https://www.purebasic.fr/english/viewtopic.php?t=79183
Procedure.s LTrimChar(String$, TrimChar$ = #CRLF$ + #TAB$ + #FF$ + #VT$ + " ")
Protected *memChar, *c.Character, *jc.Character
If Not Asc(String$)
ProcedureReturn ""
EndIf
*c.Character = @String$
*memChar = @TrimChar$
While *c\c
*jc.Character = *memChar
While *jc\c
If *c\c = *jc\c
*c\c = 0
Break
EndIf
*jc + SizeOf(Character)
Wend
If *c\c
String$ = PeekS(*c)
Break
EndIf
*c + SizeOf(Character)
Wend
ProcedureReturn String$
EndProcedure
Define String$
String$ = #CRLF$ + #CRLF$ + #CRLF$ + #TAB$ + #FF$ + #VT$ + " " + "test"
Debug "|" + LTrimChar(String$) + "|"
String$ = "\/\/\/\/" + "C:\folder"
Debug "|" + LTrimChar(String$, "\/") + "|"
String$ = #CRLF$ + #CRLF$ + #CRLF$ + #TAB$ + #FF$ + #VT$ + " "
Debug "|" + LTrimChar(String$) + "|"