Усовершенствовать скрипт

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Народ есть такой скрипт ищущий в папке наличие определенных файлов

Код: Выделить всё

procedure Dir(Path: string; FileList: TStrings);
 var
   SR: TSearchRec;
 begin
    if FindFirst(Path + '*.bmp', faAnyFile, SR) = 0 then
   begin
     repeat
       if (SR.Attr <> faDirectory) then
       begin
         FileList.Add(SR.Name);
       end;
     until FindNext(SR) <> 0;
     FindClose(SR);
   end;
//вызов ее
Dir('foto\', Memo1.lines);
Дабы пропустить другие файлы я просто повторил if несколько раз, но это криво. Вот, как бы его улучшить чтоб был типа список из пропускаемых файлов и скрипт перебирал бы его, а не конкретно заданное, решение где-то рядом, но допереть не могу..
Заранее благодарен Duncon
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

а эти пропускаемые файлы удовлетворяют твоему условию? т.е. тоже BMP?
Изображение
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Нет остальные фильтры - это *.gif, *.jpg итп
[syntax=Delphi] [/syntax]
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Дабы пропустить другие файлы я просто повторил if несколько раз, но это криво. Вот, как бы его улучшить чтоб был типа список из пропускаемых файлов и скрипт перебирал бы его, а не конкретно заданное, решение где-то рядом, но допереть не могу..
Пропустить? да при маске *.bmp он их и не будет брать....
может быть наоборот включить? тогда бери при FindFirst маску *.*, а в цикле
проверяй SR.Name на соответствие типу. например, с помощью ExtractFileExt()
С уважением, Lost Angel...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Уважаемый я имел ввиду, что повторяю цикл с разными фильтрами я показал только один из них.
А хочу, чтоб все было в одном кусочке кода который бы перебирал маски...
[syntax=Delphi] [/syntax]
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Тогда, Уважаемый, смотри моё предыдущее сообщение, или пример нужен?
С уважением, Lost Angel...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

LAngel писал(а):Тогда, Уважаемый, смотри моё предыдущее сообщение, или пример нужен?
Уважаемый,
- (Я не пытался оскорбить либо как-то наехать......)

Да хотелось бы наглядно, для полного понимания происходящего..
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Можно завести список (массив) и этот цикел прогонять подставляя его элементы...
Кстати,
'foto\'
Какая-то из функций для работы с файлами добавляет в конец слэш при необходимости...
Изображение
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

В данном случае 'foto\' это то место где ищем файлы.... Это не суть терзаний..
Меня больше напрягает вот эта строчка FindFirst(Path + '*.bmp', faAnyFile, SR) = 0 then
а точнее Path + '*.bmp' я хочу чтоб здесь можно было подставить несколько фильтров '*.bmp',' *.jpg' итд
[syntax=Delphi] [/syntax]
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Код: Выделить всё

procedure Dir(Path: string; FileList: TStrings);
var
  SR: TSearchRec;
  Ext: String;
begin
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        Ext := UpperCase(ExtractFileExt(SR.Name));
        if (Ext = '.BMP') or (Ext = '.JPG') or (Ext = '.JPEG') or (Ext = '.GIF')
          then FileList.Add(SR.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;
С уважением, Lost Angel...
Ответить