Registriert seit: 28. Mai 2008
669 Beiträge
Delphi 10.1 Berlin Starter
|
Re: Stringvergleich mit Wildcards
16. Dez 2008, 22:42
Hallo Leute,
wie ist es damit:
Delphi-Quellcode:
function MatchesMask_(text, mask: string; Modus: byte; CaseSensitive: Boolean): boolean;
var
po,i: Integer;
tmp: string;
{ Modus 0 = exakt - 1 = mit Joker - 2 = Suchwort kommt vor
Joker =
* jeweils 1* NICHT *ambu*
? gleiche Länge von Text und Maske z.B. M??er
auch Kombinationen sind möglich z.B. ?amb* oder *b?rg}
begin
case Modus of
0,
1: begin
if Modus = 1 then begin
po:=Pos('*',mask);
if po > 0 then begin
tmp:=text;
System.Delete(text,po,MAXINT);
System.Delete(tmp,1,Length(tmp) - Length(mask) + po);
text:=text + '*' + tmp
end;
if Length(mask) = Length(text) then
for i:=1 to Length(text) do
if mask[i] = '?' then text[i]:=mask[i];
end;
if CaseSensitive then
Result:=AnsiCompareStr(text,mask) = 0
else
Result:=AnsiCompareText(text,mask) = 0;
end;
2: begin
if not CaseSensitive then begin
text:=AnsiUpperCase(text);
mask:=AnsiUpperCase(mask)
end;
Result:=Pos(mask,text) > 0
end;
end
end; {MatchesMask_}
Ich denke, dass sich bis auf ganz wenige Ausnahmen GOTO vermeiden lässt und mit Zeigern nur operieren sollte, wenn es wirklich nötig ist.
|
|
Zitat
|