Code: Select all
EnableExplicit
Macro TrimLeft(String, n)
Right(String, Len(String) - n)
EndMacro
Macro TrimRight(String, n)
Left(String, Len(String) - n)
EndMacro
; Procedure.s TrimLeft(String$, n)
; ProcedureReturn Right(String$, Len(String$) - n)
; EndProcedure
; Procedure.s TrimRight(String$, n)
; ProcedureReturn Left(String$, Len(String$) - n)
; EndProcedure
Procedure FindFromEnd(String$, Find$)
Protected Offset, Pos
Repeat ; можно не бесконечный цикл на всякий случай
Offset = FindString(String$ , Find$, Offset+1) ; Поиск последней
If Not Offset ; если не найдено то выпрыгиваем, оставляя Pos с последним найденным
Break
EndIf
Pos = Offset
ForEver
ProcedureReturn Pos
EndProcedure
Procedure FindFromEnd2(String$, Find$)
Protected Pos
Pos = FindString(ReverseString(String$) , ReverseString(Find$)) ; Поиск последней
If Pos
Pos = Len(String$) - Pos - Len(Find$) + 2
EndIf
ProcedureReturn Pos
EndProcedure
Procedure.s TrimLeftToFind(String$, Find$)
Protected Pos
Pos = FindString(String$ , Find$)
If Pos
ProcedureReturn Right(String$, Len(String$) - Pos - Len(Find$) + 1)
EndIf
EndProcedure
Procedure.s TrimRightToFind(String$, Find$) ; удалить, найдено краткая запись, см ниже
Protected Offset, Pos
Repeat ; не бесконечный цикл на всякий случай
Offset = FindString(String$ , Find$, Offset+1) ; Поиск последней
If Not Offset ; если не найдено то выпрыгиваем, оставляя Pos с последним найденным
Break
EndIf
Pos = Offset
ForEver
ProcedureReturn Left(String$, Pos - 1)
EndProcedure
Procedure.s TrimRightToFind2(String$, Find$)
Protected Pos
Pos = FindString(ReverseString(String$), ReverseString(Find$))
If Pos
ProcedureReturn Left(String$, Len(String$) - Pos - Len(Find$) + 1)
EndIf
EndProcedure
; https://www.purebasic.fr/english/viewtopic.php?p=586876#p586876
Procedure.s FindBetween(String$, DelimStart$, DelimEnd$, IsCase = #PB_String_CaseSensitive)
Protected Pos, Pos2
Pos = FindString(String$ , DelimStart$, 1, IsCase)
If Pos
Pos + Len(DelimStart$)
Pos2 = FindString(String$ , DelimEnd$, Pos, IsCase)
If Pos2
ProcedureReturn Mid(String$, Pos, Pos2 - Pos)
EndIf
EndIf
EndProcedure
MessageRequester("Trim n characters to the left", TrimLeft("characters", 2))
MessageRequester("Trim n characters to the right", TrimRight("characters", 2))
MessageRequester("Search from the end", Str(FindFromEnd("Search from the end", "ro")))
MessageRequester("Search from the end", Str(FindFromEnd2("Search from the end", "ro")))
MessageRequester("Trimming from the beginning including the found", TrimLeftToFind("Trimming from the beginning including the found", "lud"))
MessageRequester("Trimming from the end including found", TrimRightToFind("Trimming from the end including found", "lud"))
MessageRequester("Trimming from the end including found", TrimRightToFind2("Trimming from the end including found", "lud"))
MessageRequester("Find between", FindBetween("Driver xvz (v1.2) 00", "xvz (v", ")"))