{
Данная функция осуществляет сравнение двух строк. Первая
строка
может быть любой, но она не должна содержать символов соответствия
(* и ?).
Строка поиска (искомый образ) может содержать абсолютно любые
символы.
Для примера: MatchStrings('David Stidolph','*St*') возвратит
True.
Автор оригинального C-кода Sean Stanley
Автор портации на Delphi 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 0 = StrComp(pattern,'*') 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;