![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Соответствие имени файла заданой маске
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.