FindSubString()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

FindSubString()

Beitrag von uweb »

Da FindString() immer nur von links nach rechts sucht
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
effizient, elegant und beispielhaft oder einfach nur cool
ist kann es immer noch nach [Code, Tipps und Tricks] verschoben werden.

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))
edit :
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.