Folgender Code stammt von @NicTheQuick und funktioniert bis auf 3 Funktionen die ich dringend benötige auch prima und schnell. Danke @NicTheQuick
Code: Alles auswählen
Procedure CompareWithWildcards(*String.BYTE, *WC.BYTE)
Protected *z1.BYTE, *z2.BYTE, *z3.BYTE
Protected a.l, WCLength.l, StringLength.l
*z1 = *WC
*z2 = *String
Repeat
If *z1\b = '*'
*z3 = *z1 + 1
If *z3\b = 0 ;Wenn der Stern am Schluss steht
ProcedureReturn #True
Else
If *z3\b = 0 ;Wenn der String am Ende ist
ProcedureReturn #False
Else
*z3 = *z1 + 1
If *z3\b = *z2\b
*z1 + 1
Else
*z2 + 1
EndIf
EndIf
EndIf
ElseIf *z1\b = '?'
If *z2\b = 0
ProcedureReturn #False
Else
*z1 + 1
*z2 + 1
EndIf
Else
If *z1\b = *z2\b
*z1 + 1
*z2 + 1
Else
ProcedureReturn #False
EndIf
EndIf
Until *z1\b = 0
ProcedureReturn #True
EndProcedure
Text.s="2030501"
Suchmuster.s="??3"
Debug CompareWithWildcards(@Text,@Suchmuster) ; liefert True, sollte aber false sein weil nach der 3 im
; Suchmuster kein "*" steht
Text.s="2030501"
Suchmuster.s="*5"
Debug CompareWithWildcards(@Text,@Suchmuster) ; liefert True, sollte aber false sein weil nach
; einem String gesucht wird, der am Ende eine 5 stehen hat
Text.s="2030501"
Suchmuster.s="*6?1"
Debug CompareWithWildcards(@Text,@Suchmuster) ; liefert True, sollte aber false sein