Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сравнение строк


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 решит все твои проблемы


Наверх

Титульная страница Поиск, карта сайта Написать письмо