und ich keine Alternative fand habe ich FindSubString() gebastelt.
FindSubString(String$, SuchString$, StartPosition)
Ich wollte mir keine zwei Namen merken, deshalb ruft FindSubString()
bei einer positiven StartPosition einfach FindString() auf.
Bei einer negativen StartPosition arbeitet die Suche von rechts nach links.
Über Verbesserungsvorschläge würde ich mich freuen.
Geschwindigkeitsfetischisten sind herzlich willkommen.
Wenn das ganze dann irgendwann mal wirklich
ist kann es immer noch nach [Code, Tipps und Tricks] verschoben werden.effizient, elegant und beispielhaft oder einfach nur cool
Code: Alles auswählen
Procedure FindSubString(String$, SuchString$, Position)
If Position < 0
Position = Position *-1
Position = Len(String$)-Position+1
For i = Position To 1 Step -1
x = FindString(String$, SuchString$, i)
If x And x+Len(SuchString$)-1 <= Position : Break:EndIf
Next
ProcedureReturn i
ElseIf Position > 0
ProcedureReturn FindString(String$, SuchString$, Position)
Else
ProcedureReturn 0
EndIf
EndProcedure
Test.s = "Beispiel.datei.bla"
x=FindSubString(Test.s,".",-4)
If x
PokeB(@Test.s+x-1, Asc("#"))
Debug Test.s
Else
Debug "Nicht gefunden"
EndIf
Test.s = "Hallo__ich__bin__ein__Beispieltext."
Debug "."
Debug "__1 "+Str(FindSubString(Test.s,"__",1))
Debug "_1 "+Str(FindSubString(Test.s,"_",1))
Debug "__-1 "+Str(FindSubString(Test.s,"__",-1))
Debug "_1 "+Str(FindSubString(Test.s,"_",-1))
Debug "."
Debug "__15 "+Str(FindSubString(Test.s,"__",15))
Debug "_15 "+Str(FindSubString(Test.s,"_",15))
Debug "__-15 "+Str(FindSubString(Test.s,"__",-15))
Debug "_-15 "+Str(FindSubString(Test.s,"_",-15))
Mehrere kleine Fehler hin und her korrigiert.
Das mit dem Lesen und schreiben klappt halbwegs, nur mit dem
Zählen habe ich noch Probleme. Vielleicht hätte ich die Schule
doch nicht schon nach einem halben Jahr schmeißen sollen.
P.S.
Bei -15 bezieht sich 15 auf den rechten Rand.
Die Zählung beginnt auch hier bei 1 bzw -1.
Der Rückgabewert bezieht sich aber wieder auf die normale Zählung.