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

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

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


Anonimus ©   (2005-01-10 14:56:00) 

Добрый день.
Кто-нибудь может подсказать функцию для проверки сабжа.
Мне это представляется таким вот образом :
function IfMask(FileName, Mask : string): boolean;


Anonimus   (2005-01-10 17:19:00) [1]

TUser ©   (10.01.05 15:50) [3]
А смысл, если есть готовое =)

Antonn ©   (10.01.05 16:16) [6]
Маска файла подразумевает не только расширение, так например
~tmp_doc.doc = ~tmp.*
~tmp_doc.doc = *.doc

если нужно скопировать все ДОКи, то не обязательно копировать временные файлы Ворда


Antonn   (2005-01-10 16:16:00) [2]


> ExtractFileExt звездочку не возвращает.

а она и не нужна. мой пример ищет расширение файла в строке расширений. и находит, если есть. да еще он попроще:)


TUser   (2005-01-10 16:12:00) [3]

ExtractFileExt звездочку не возвращает. Кроме того, [2] и [3] универсальнее.


Antonn   (2005-01-10 16:02:00) [4]

а так:) :

ext := lowercase(ExtractFileExt(name));  
if pos(ext, lowercase('*.wav;*.pls;*.m3u;') ) > 0     then begin  
///
 end;


TUser   (2005-01-10 15:50:00) [5]

Попробую сам написать

function IsValidMask(FileName: string;
                    Mask: string;
                    StartInFile: integer = 1;
                    StartInMask: integer = 1): boolean;

function HasInPosition: boolean;
var i: integer;
begin
  i:=StartInFile; result:=true;
  while result and (i <= length(FileName)) do
    if IsValidMask(FileName,Mask,i,StartInMask+1) then
      result:=false
      else inc (i);
  result:=not result;
end;

begin
 result:=true;
 while result and
       (StartInName <= length(FileName)) and
       (StartInMask <= length(Mask)) do begin
   if Mask[StartInMask] = '*' then begin
      result:=HasInPosition;
      Exit;
      end;
   result:=(Mask[StartInMask] = '?') or
           (Mask[StartInMask] = FileName[StartInFile]);
   if result then begin
     inc (StartInMask);
     inc (StartInFile);
     end;
   end;
end;


Anonimus   (2005-01-10 15:15:00) [6]

Сенкс, щаз попробую


begin...end   (2005-01-10 14:58:00) [7]

> Anonimus ©   (10.01.05 14:56)

Модуль Masks, функция MatchesMask.


Наверх

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