OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 17:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: Пятница, 08 Ноябрь, 2013 22:38 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
В меню ББ есть пункты поиска по всяким местам, однако я заметил, что часто надо найти ключевую фразу в документах из каталога Rsrc или других. Модифицировал стандартный перебор каталогов внутри DevSearch, может кому пригодится.
Код:
   (* выполняет поиск во всех текстовых документах внутри каталога ББ *)
   PROCEDURE SearchEverywhere*;
         VAR pat: Pattern; t, log: TextModels.Model; v: Views.View; title: Views.Title; c: Containers.Controller;
         files: Files.FileInfo; dirs, subs: Files.LocInfo;
         loc, sloc: Files.Locator; path, p: Files.Name; list: Text;
   BEGIN
      (*TextCmds.InitFindDialog; *)
      pat := TextCmds.find.find$;
      IF pat # "" THEN
         Dialog.ShowStatus(searchingKey);
         TextCmds.find.find := pat$;
         log := TextModels.dir.New();
         w.ConnectTo(log); w.SetPos(0);
         list := NIL;
         loc := Files.dir.This("");
         subs:=Files.dir.LocList(loc);   
         WHILE subs#NIL DO
            path := subs.name$;
            sloc:=loc.This(subs.name);
            files := Files.dir.FileList(sloc);
            WHILE files # NIL DO
               IF files.type = Kernel.docType THEN
                  p := path + "/" + files.name;
                  t := ThisText(sloc, files.name);
                  IF t # NIL THEN
                     Find(t, pat, p, list, TRUE)
                  END
               END;
               files := files.next
            END;
            subs:=subs.next
         END;
         loc := Files.dir.This("");
         dirs := Files.dir.LocList(loc);
         WHILE dirs # NIL DO
            loc := Files.dir.This(dirs.name);
            subs:=Files.dir.LocList(loc);
            WHILE subs#NIL DO
               path := dirs.name + "/"+subs.name;
               sloc:=loc.This(subs.name);
               files := Files.dir.FileList(sloc);
               WHILE files # NIL DO
                  IF files.type = Kernel.docType THEN
                     p := path + "/" + files.name;
                     t := ThisText(sloc, files.name);
                     IF t # NIL THEN
                        Find(t, pat, p, list, TRUE)
                     END
                  END;
                  files := files.next
               END;
               subs:=subs.next;
            END;
            dirs := dirs.next
         END;
         List(list, pat, TRUE, TRUE);
         v := TextViews.dir.New(log);
         title := 'Search for "' + pat + '"';
         v(TextViews.View).SetDefaults(NewRuler(), TextViews.dir.defAttr);
         Views.OpenAux(v, title);
         c := v(Containers.View).ThisController();
         c.SetOpts(c.opts + {Containers.noCaret});
         w.ConnectTo(NIL);
         Dialog.ShowStatus("")
      END
   END SearchEverywhere;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 15 Ноябрь, 2013 15:22 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Карточка в коллекции: http://oberoncore.ru/bbcc/subs/omc/search


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB