Wie kann ich zwei Strings mit Wildscards miteinander vergleichen?
Diese Funktion vergleicht zwei Strings miteinander. Der erste String kann jedes
beliebiges Zeichen außer den Wildcards ? und * enthalten.
Der zweite kann so viele Wildcards beinhalten wie man will.
Zum Beispiel würde MatchStrings('Sean Stanley', '*St*') true zurückgeben.
Orignal code by Sean Stanley in C, rewritten in Delphi by David Stidolph
function MatchStrings(source, pattern: String): Boolean;
var pSource: Array [0..255] of Char;
pPattern: Array [0..255] of Char;
function MatchPattern(element, pattern: PChar): Boolean;
function IsPatternWild(pattern: PChar): Boolean;
var t: Integer;
begin
Result := StrScan(pattern,'*') <> nil;
if not Result then Result := StrScan(pattern,'?') <> nil;
end;
begin
if StrComp(pattern,'*')=0 then
Result := True
else if (element^ = Chr(0)) and (pattern^ <> Chr(0)) then
Result := False
else if element^ = Chr(0) then
Result := True
else begin
case pattern^ of
'*': if MatchPattern(element,@pattern[1]) then
Result := True
else
Result := MatchPattern(@element[1],pattern);
'?': Result := MatchPattern(@element[1],@pattern[1]);
else
if element^ = pattern^ then
Result := MatchPattern(@element[1],@pattern[1])
else
Result := False;
end;
end;
end;
begin
StrPCopy(pSource,source);
StrPCopy(pPattern,pattern);
Result := MatchPattern(pSource,pPattern);
end;
| Delphi 1 | Delphi 2 | Delphi 3 | Delphi 4 |
| nicht getestet | Version nicht betroffen | getestet |
siehe auch: