Procedure.l FindLastString(String$, StringToFind$, CaseInSensitive=0)
Protected length=Len(StringToFind$), *position=@String$+(Len(String$)-length)*SizeOf(Character)
While @String$ < *position
If CompareMemoryString(*position, @StringToFind$, CaseInSensitive, length) = 0
ProcedureReturn (*position-@String$)/SizeOf(Character)+1
EndIf
*position-SizeOf(Character)
Wend
ProcedureReturn 0
EndProcedure
Debug FindLastString("Am Anfang sollte der Suchstring sollte stehen, um die Prozedur zu fordern!", "anfang", 1)
Procedure FindLastString(ss.s,search.s)
spoint.l = StrRStrI_(ss,0,search)
If spoint
ProcedureReturn = Len(ss)-Len(PeekS(spoint))
Else
ProcedureReturn 0
EndIf
EndProcedure
Debug FindLastString("Am Anfang sollte der Suchstring sollte stehen, <anfang> um die Prozedur zu fordern!", "1anfang")
Debug FindLastString("Am Anfang sollte der Suchstring sollte stehen, <anfang> um die Prozedur zu fordern!", "anfang")
Procedure.l laststring(a$, b$, casesense.b) ; a$ = search in, b$ = look for
If casesense>0 ; 0 = case sensitive, else none sensitive
a$ = UCase(a$)
b$ = UCase(b$)
EndIf
For k = 1 To Len(a$)-Len(b$)+1
If Mid(a$, k, Len(b$)) = b$
pos = k
EndIf
Next
ProcedureReturn pos
EndProcedure
Mike.
(I'm never going to catch up with the improvements to this program)
Procedure FindStringLast(string$,match$)
pos=1 : Repeat : a=FindString(string$,match$,pos) : If a<>0 : pos=a+1 : EndIf : Until a=0
ProcedureReturn pos-1
EndProcedure
Debug FindStringLast("123-567-90","-") ; Returns 8, because the last dash is at position 8.
Debug FindStringLast("the war of the worlds","the") ; Returns 12, because last "the" is at 12.