Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 069

•  TDictionary Custom Sort  6 169

•  Fast Watermark Sources  5 964

•  3D Designer  8 847

•  Sik Screen Capture  6 308

•  Patch Maker  6 719

•  Айболит (remote control)  6 713

•  ListBox Drag & Drop  5 571

•  Доска для игры Реверси  95 909

•  Графические эффекты  6 934

•  Рисование по маске  6 179

•  Перетаскивание изображений  5 099

•  Canvas Drawing  5 470

•  Рисование Луны  5 181

•  Поворот изображения  4 722

•  Рисование стержней  3 336

•  Paint on Shape  2 575

•  Генератор кроссвордов  3 474

•  Головоломка Paletto  2 773

•  Теорема Монжа об окружностях  3 575

•  Пазл Numbrix  2 344

•  Заборы и коммивояжеры  3 028

•  Игра HIP  1 984

•  Игра Go (Го)  1 906

•  Симулятор лифта  2 259

•  Программа укладки плитки  1 970

•  Генератор лабиринта  2 423

•  Проверка числового ввода  2 100

•  HEX View  2 429

•  Физический маятник  2 058

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Фильтрованный поиск в строке



Автор: David Stidolph

Есть множество задач, где необходимо использование так называемой "дикой карты", то есть поиск в строке по фильтру, когда в качестве поиска используется подстрока с символом "*" (звездочка). Например, если необходимо выяснить наличие подстроки 'St' с какими-либо символами перед ней, то в качестве параметра для поиска задается подстрока вида '*St'. Звездочка может присутствовать как в начале/конце подстроки, так и по обеим ее сторонам. Также при составлении фильтра вместо любого одиночного символа возможна подстановка знака вопроса.

Пока функция может только сообщать о наличии необходимых вложений, но было бы интересно получить ваши примеры, которые могли бы и возвращать искомую подстроку.


{
Данная функция осуществляет сравнение двух строк. Первая строка
может быть любой, но она не должна содержать символов соответствия (* и ?).
Строка поиска (искомый образ) может содержать абсолютно любые символы.
Для примера: 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;





Похожие по теме исходники

Поисковик

Поиск символа

Поиск файлов

Поиск открытых файлов

 

Findup (поиск дублей)

Дейкстра: поиск кратчайшего пути




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте