![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравнение строк
Krants © (2006-11-24 17:43:00)Знает ли кто функцию(может завалялся алгоритм) осуществляющую сравнение строк одна из которой может быть задана в форме маски(т.е. "*иванов*получил ? балов*").
И возвращаемая булевский результат?
Anatoly Podgoretsky (2006-11-24 18:46:00) [1]> Krants (24.11.2006 17:43:00) [0]
MatchesMask
Krants (2006-11-24 18:39:00) [2]уже понял, вот раньше бы сказал...
Virgo_Style (2006-11-24 18:34:00) [3]MatchesMask, регулярные выражения
Krants (2006-11-24 18:07:00) [4]вот так всегда, сам спрашиваю и сам же нахожу ответ...
держите может кому-то и пригодится
{
Данная функция осуществляет сравнение двух строк. Первая строка
может быть любой, но она не должна содержать символов соответствия (* и ?).
Строка поиска (искомый образ) может содержать абсолютно любые символы.
Для примера: 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;
zdm (2006-11-24 17:59:00) [5]select ... from ... where name LIKE %ива% and bal=5;
if fields[0].asstring='' then showmessage('нет такого человечка')
Krants (2006-11-24 17:57:00) [6]
> использу БД, и оператор LIKE решит все твои проблемы
точно! только вот напряжно будет компоненту, для которого нужен этот алгоритм...
zdm (2006-11-24 17:51:00) [7]использу БД, и оператор LIKE решит все твои проблемы