J'ai fais cette fonction comme çà pour tester et je soupconne qu'en asm ce pourrait etre plus rapide que la fonction PB.
Le gain serait sans doute pas énorme, juste un petit défi ...
Code : Tout sélectionner
Procedure.l FindString2(*StrMain.l, *StrFind.l, CharPos.l = 1, CharMask.c = '*')
*hFind.CHARACTER = *StrFind
*hMain.CHARACTER = *StrMain + CharPos - 1
Repeat
If *hFind\c = 0
ProcedureReturn (1+((*hMain-(*hFind-*StrFind))-*StrMain))
EndIf
If *hMain\c = 0
ProcedureReturn #False
ElseIf (*hMain\c = *hFind\c) Or (*hFind\c = CharMask)
*hFind + 1
Else
*hFind = *StrFind
EndIf
*hMain + 1
ForEver
EndProcedure
;------------
myStr.s = "For testing purpose: Hello, i'm a purebasic string :-)"
myFind.s = "p___b___c"
Debug FindString(myStr,myFind,1)
Debug FindString2(@myStr,@myFind,1,'_')