Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проверка на соответствие имени файла заданной маске

Delphi , Файловая система , Файлы



Автор: Dmitry Raduzhan
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Зависимости: sysutils
Автор:       Dmitry Raduzhan
Copyright:   Dmitry Raduzhan
Дата:        24 марта 2004 г.
***************************************************** }

function FileMaskEquate(F, M: string): boolean;
var
  Fl, Ml: byte; // length of file name and mask
  Fp, Mp: byte; // pointers
begin
  F := UpperCase(F);
  M := UpperCase(M);
  result := true;
  Fl := length(F);
  Ml := length(M);
  Fp := 1;
  Mp := 1;
  while Mp <= Ml do
  begin // wildcard
    case M[Mp] of //
      '?':
        begin // if one any char
          inc(Mp); // next char of mask
          inc(Fp); // next char of file name
        end; //
      '*':
        begin // if any chars
          if Mp = Ml then
            exit; // if last char in mask then exit
          if M[Mp + 1] = F[Fp] then
          begin // if next char in mask equate char in
            Inc(Mp); // file name then next char in mask and
          end
          else
          begin // else
            if Fp = Fl then
            begin // if last char in file name then
              result := false; // function return false
              exit; //
            end; // else, if not previous, then
            inc(Fp); // next char in file name
          end; //
        end; //
    else
      begin // other char in mask
        if M[Mp] <> F[Fp] then
        begin // if char in mask not equate char in
          result := false; // file name then function return
          exit; // false
        end; // else
        inc(Fp); // next char of mask
        inc(Mp); // next char of file name
      end //
    end;
  end;
end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := ExtractFileName(openDialog1.Files[0]);
  if opendialog1.Execute then
  begin
    if FileMaskEquate(s, Edit1.text) then
      ShowMessage('Ok')
    else
      ShowMessage('Failed');
  end;
end;

Перевод контента на русский язык:

Это программное обеспечение Delphi, которое проверяет соответствие имени файла заданному маске. Функция FileMaskEquate принимает два параметра: имя файла и маску. Она возвращает True, если имя файла соответствует маске, и False в противном случае.

Вот шаг за шагом, как функция работает:

  1. Сначала она конвертирует оба имени файла и маски в верхний регистр с помощью функции UpperCase.
  2. Затем она инициализирует несколько переменных: Fl и Ml, чтобы хранить длины имени файла и маски соответственно; Fp и Mp, чтобы использовать как указатели для перебора имени файла и маски соответственно; и result, чтобы хранить результат сравнения в конце.
  3. Функция затем вступает в цикл, который перебирает маску. Для каждого символа в маске:
    • Если символ является вопросительным знаком ('?''), она просто переходит к следующему символу в обоих имени файла и маски.
    • Если символ является звездочкой ('*'), она проверяет, соответствует ли текущий символ в имени файла следующему символу в маске (если он есть). Если это так, она переходит к следующему символу в обоих. Если нет, она проверяет, есть ли еще символы в имени файла; если нет, она возвращает False. В противном случае она переходит к следующему символу в обоих.
    • Если символ является чем-то другим, она проверяет, соответствует ли текущий символ в имени файла текущему символу в маске. Если не соответствует, она возвращает False. Если соответствует, она переходит к следующему символу в обоих.
  4. Функция finally возвращает значение result.

Пример кода, предоставленный ниже, демонстрирует, как использовать эту функцию в приложении Delphi. Он создает компонент OpenDialog и устанавливает свойство Files в имя первого файла, выбранного пользователем. Затем он вызывает функцию FileMaskEquate с извлеченным именем файла и текстом из контрола редактирования, и отображает сообщение в зависимости от результата.

Некоторые предложения по улучшению:

  • Функция могла быть сделана более эффективной за счет использования библиотеки регулярных выражений вместо реализации собственного логика pattern-matching.
  • Функция также могла быть сделана более гибкой, позволяя пользователю указать опции, такие как нечувствительность к регистру или игнорирование пробельных символов.
  • Код мог бы выиграть от комментариев и документации, чтобы объяснить его цель и поведение.

В статье описывается функция Delphi, которая проверяет соответствие имени файла заданной маске, используя встроенные функции и операторы для сравнения символов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 22:40:53/0.0036249160766602/0