|
|
|||||||||||||||
|
Suche mit Wildcards ![]() VorbemerkungDie Suche mit Wildcards (wildcard search) ist vor allem aus dem Dateisystem geläufig. '?' steht für ein einzelnes Zeichen, '*' für eine beliebige Zeichenkombination (oder kein Zeichen). Häufig werden hier Dateinamen gesucht z.B. T*.doc, das alle Dokumente mit T am Anfang findet. Leider sucht man eine funktionierende Stringsuche nach diesen Regeln in Delphi vergeblich und auch die Sources, die ich so im Netz fand, hatten so ihre Macken.
wpos() ist pos() mit Wildcards: ? für ein beliebiges Zeichen, * für 0-n beliebige Zeichen. Die Syntax orientiert sich am pos-Befehl, der einfachste Aufruf ist wpos(wild,s). Wpos findet das erste Auftreten des Suchstrings Wild. Da die Länge größer sein kann als die des Suchstrings muß auch die Länge der gefundenen Passage zurückgegeben werden. Daher wird das Ergebnis in einem TPosition-Record zurückgegeben. Den Start des gefundenen Strings erhält man z.B. mit wpos().start Das Isolieren des gefundenen Strings kann mit folgender Sequenz erfolgen with wpos('?x','Text') do
s := copy('Text',start,len);
Durch Angabe der Startposition eignet sich wpos auch zum Parsen. Für Sonderfälle können die Wildcards durch beliebige Zeichen ausgetauscht werden. Hier nun der vollständige Code
Type
TPosition = record // Position eines Substrings in einem String
start,len: integer;
end;
{ -------------------------------------------------
Wildcard-Compare von Dr. Ecki
mit Rückgabe gefundene Position
-------------------------------------------------}
function WPos(const Wild,S: string; const StartPos: Integer = 1;
const all: char='*'; const one: char='?'): TPosition;
var lw,ls: integer;
cw: char;
//-- match ab einer bestimmten Position ps, Result wird als res übergeben,
Rückgabe gefunden: ja/nein --//
function match(ps: integer; var res: TPosition): boolean;
var i: integer;
![]() |
|||||||||||||||