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: