Re: Funktion, die Platzhalter ("*" und "?") in String prüft
Verfasst: 25.07.2011 00:13
Danke schonmal! Bin jetzt aber doch weiter am probieren mit deinem Code.
Ich brauche es eigentlich genauso wie bspw. bei der Windows-Suche: Der Benutzer gibt den String ein und dann wird dieser mit einem Text (z.B. Dateipfad) verglichen.
"#" habe ich bereits eingebaut. Einfach folgendes in den Select-Block bei Pattern_Find() hinzufügen:
Nun war ich gerade dabei noch eine Procedure zu erstellen, die mir ähnlich wie RegEx einfach #True bzw. #False zurückgibt - Je nachdem ob String und Pattern zusammenpassen. Hier mein erster Anfang dazu:
...Dabei ist mir aber die Frage gekommen was FoundLength eigentlich zurückgibt? Nach meinem Verständnis sollte bei dem String "Beispiel123.exe" und dem Pattern "*" 15 herauskommen - was auch der Fall ist. Der Pattern "*.*" ergibt jedoch 16, "?*?" ist 1 und "?ei*###.*" ist 19 (mit der obigen Nummernerweiterung). Hast du eine Idee woran das liegt?
Bisschen Offtopic:
Nach welcher Regel schreibst du eigentlich "StringIndex+PatternIndex" oder "Number + 7"? Es geht mir ums setzten der Leerzeichen.
Mich interessiert es, weil ich mir mittlerweile angewöhnt habe, zwischen Allem Leerzeichen zu setzen. Aber dein Stil erscheint mir sinnvoller und z.T. übersichtlicher, obwohl ich in gewissen Teilen keine Logik dahinter finden kann... deshalb frage ich.

Ich brauche es eigentlich genauso wie bspw. bei der Windows-Suche: Der Benutzer gibt den String ein und dann wird dieser mit einem Text (z.B. Dateipfad) verglichen.
"#" habe ich bereits eingebaut. Einfach folgendes in den Select-Block bei Pattern_Find() hinzufügen:
Code: Alles auswählen
Case '#' ; Wildcard for exactly one number
If *String\c[StringIndex + PatternIndex] < 48 Or *String\c[StringIndex + PatternIndex] > 57
Break 2
EndIf
Code: Alles auswählen
Procedure StringPatternMatch(String.s, Pattern.s)
Protected Position, FoundLength
Protected Result = #False
Position = FindPattern(String, Pattern, 1, @FoundLength)
If Position = 1
If FoundLength = Len(String) ;!!! FoundLength ist unzuverlässig!
Result = #True
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Bisschen Offtopic:
Nach welcher Regel schreibst du eigentlich "StringIndex+PatternIndex" oder "Number + 7"? Es geht mir ums setzten der Leerzeichen.
Mich interessiert es, weil ich mir mittlerweile angewöhnt habe, zwischen Allem Leerzeichen zu setzen. Aber dein Stil erscheint mir sinnvoller und z.T. übersichtlicher, obwohl ich in gewissen Teilen keine Logik dahinter finden kann... deshalb frage ich.
