Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2008, 16:07   #11
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Alter Посмотреть сообщение
Как видите не так сложно, ищет быстро.
Только еще быстрее будет проверять маску прямо в одном цикле с FindNext, не создавая горы строковых списков и прочего.
B_N вне форума Ответить с цитированием
Старый 21.02.2008, 21:48   #12
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Восклицание Я непросто так написал, я это использую. Уж поверьте.

Цитата:
Сообщение от B_N Посмотреть сообщение
Только еще быстрее будет проверять маску прямо в одном цикле с FindNext, не создавая горы строковых списков и прочего.
Это я вырезал у себя, и вставил сюда отдельно. А использую я его при поиске, если незаметили. Список масок создаётся при старте программы, или когда кому там надо.

Смотрите и убедитесь, я проверяю там где надо. Я использую нормальную поисковую процедуру, которая удовлетворяет мои запросы.

Вот вырезал чтобы убедились, только убрал из поиска прогресс, паузу и стоп:

Здесь

Код:
Uses Masks;
....................................................................................................
Var LItems :TStrings; // Список масок, загружается(заполняется) до начала поиска | LItems := TStringList.Create;
....................................................................................................
implementation

{$R *.dfm}

....................................................................................................

procedure TForm1.FindFiles(StartFolder, Mask: string; List: TStrings;
  ScanSubFolders: Boolean=True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;
begin
  List.BeginUpdate;
  try
    StartFolder:=IncludeTrailingBackslash(StartFolder);
    FindResult:=FindFirst(StartFolder+'*.*', faAnyFile, SearchRec);
    try
      while FindResult=0 do
        with SearchRec do
        Begin
    Application.ProcessMessages();

          if (Attr and faDirectory)<>0 then
          begin
            if ScanSubFolders and (Name<>'.') and (Name<>'..') then
              FindFiles(StartFolder+Name, Mask, List, ScanSubFolders);
          end
           Else
          Begin
            if FileInMask(Name, LItems)  Then // Смотрим совпадение с масками
              List.Add(StartFolder + Name);
          End;
          FindResult:=FindNext(SearchRec);

        End;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
end;

Function TForm1.FileInMask(S :String; Lst :TStrings):Boolean;   
Var I, II :LongInt;   
begin//Проверка файла на наличие его в списке Маск поиска   
 Result := False;   
 IF Length(S)<=0 Then Exit;   
   II := Lst.Count;   
 IF II>0 Then   
 For I:=0 To II - 1 DO   
 begin  
  Application.ProcessMessages();   
  IF MatchesMask(S, Lst[i]) Then // Если соответствует маске, выходим   
  begin  
   Result := True;   
   Break;   
  end;   
 end;   
end;

....................................................................................................
___________________________________ ____________________________
Надо внимательнее смотреть что пишу .

Последний раз редактировалось Alter; 21.02.2008 в 21:50.
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по "маске" Родион БД в Delphi 2 16.06.2008 07:33
Как удалить из строки подстроку по маске ? - fenix - Помощь студентам 4 23.04.2008 15:04
Найти окно по маске Иллидан Общие вопросы Delphi 2 28.02.2008 01:06
Поиск MAKEDON Общие вопросы Delphi 2 22.02.2008 22:47
Замена по маске Drain Общие вопросы Delphi 1 14.02.2008 16:08