String functions

Just starting out? Need help? Post your questions and find answers here.
AZJIO
Addict
Addict
Posts: 1372
Joined: Sun May 14, 2017 1:48 am

String functions

Post by AZJIO »

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", ")"))
Last edited by AZJIO on Tue Aug 09, 2022 8:26 pm, edited 2 times in total.
User avatar
STARGÅTE
Addict
Addict
Posts: 2090
Joined: Thu Jan 10, 2008 1:30 pm
Location: Germany, Glienicke
Contact:

Re: String functions

Post by STARGÅTE »

You post in "Coding Questions". So what is the question?

Btw. Pure Basic has already functions like your TakeRight and TakeLeft, the names are Left() and Right() which you use yourself some lines below :?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Lizard - Script language for symbolic calculations and moreTypeface - Sprite-based font include/module
Post Reply