purebasic.info

PureBasic forum
Текущее время: Пн дек 11, 2017 4:38 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 95 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7
Автор Сообщение
 Заголовок сообщения: Re: TreeGadget
СообщениеДобавлено: Ср мар 29, 2017 10:26 am 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 387
Благодарил (а): 49 раз.
Поблагодарили: 18 раз.
Пункты репутации: 10
Спасибо, Пётр. Выборка происходит нормально, но теперь иерархия папок нарушена. Если загрузить один из этих сохранённых списков, то дерево будет выглядеть так, будто все файлы находятся в корне. А это не так.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: TreeGadget
СообщениеДобавлено: Ср мар 29, 2017 12:35 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11069
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Вчера не было возможности нормально протестировать код. Теперь должно работать.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Procedure CopyTree(*Src.TreeFiles, *Dest.TreeFiles, List Ext.s())
  Protected s.s, x
 
  If *Src And *Dest
   
    ForEach *Src\D()
      If AddElement(*Dest\D())
        *Dest\D()\N = *Src\D()\N
        CopyTree(*Src\D(), *Dest\D(), Ext())
      EndIf
    Next
   
    ForEach *Src\F()
      s = LCase(GetExtensionPart(*Src\F()\N))
      x = #False
     
      ForEach Ext()
        If s = Ext()
          x=#True
          Break
        EndIf
      Next
     
      If x=#True
        If AddElement(*Dest\F())
          CopyStructure(*Src\F(), *Dest\F(), FileList)
        EndIf
      EndIf
     
    Next
   
  EndIf
EndProcedure
 
Procedure SaveFile(*Tree.TreeFiles, File.s, Extensions.s)
  Protected Temp.TreeFiles, Count, i, s.s
  Protected NewList Ext.s()
 
  Count = CountString(Extensions, ",")+1
  For i=1 To Count
    s=Trim(StringField(Extensions, i, ","))
    If s<>""
      If AddElement(Ext())
        Ext() = LCase(s)
      EndIf
    EndIf
  Next
 
  CopyTree(*Tree, @Temp, Ext())
  DelDir(@Temp)
  TreeParentNull(Temp) ; Обнуление ссылок на на родительские узлы дерева.
 
  If CreateJSON(0)
    InsertJSONStructure(JSONValue(0), @Temp, TreeFiles)
    SaveJSON(0, File)
    FreeJSON(0)
  EndIf
EndProcedure


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: TreeGadget
СообщениеДобавлено: Ср мар 29, 2017 2:58 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 387
Благодарил (а): 49 раз.
Поблагодарили: 18 раз.
Пункты репутации: 10
Пётр, спасибо большое! Теперь действительно работает как надо. И код стал намного лучше, можно смело масштабировать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: TreeGadget
СообщениеДобавлено: Пт авг 04, 2017 2:37 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 387
Благодарил (а): 49 раз.
Поблагодарили: 18 раз.
Пункты репутации: 10
Всем привет!
Прошло уже довольно много времени с момента открытия этой темы, но тем не менее хотелось бы поделиться с общественностью одним изделием, основа для которого была взята именно из этой темы. Пользуясь случаем ещё раз хочу поблагодарить Петра за помощь и дельные советы. Без его участия ничего бы не вышло.

Собственно программа.

Если кто не доверяет, прошу проходите, не задерживайтесь. Скажу только одно, что никакого криминала в виде зверей и прочего там нет. Мне это вообще не нужно. Да и делалось это для работы. Тогда зачем это здесь, спросите вы?
Конкретно для этого форума вижу, например, такое применение: собрать/систематизировать/структурировать коллекцию своих исходников (навести порядок).

Принцип и особенности работы (управление):
При первом запуске нужно будет определить директорию для сканирования. Так как делалось для работы, то расширение у вложенных текстовых файлов должно быть "dat". Файл не должен быть меньше 8 Байт - ограничение пакера. Суть: можно создать папки с говорящими именами и разложить в них соответствующие файлы. На выходе получим наглядное дерево этих папок. После сканирования можно просматривать файлы из базы и производить в них поиск прямой-обратный. Особенность поиска: если подстрока найдена, например где-то в середине документа, и если теперь изменить слово для поиска, то поиск будет производиться не с начала документа, а с позиции найденной до этого подстроки. Также в виде бонуса сделал историю того, что искали (считаю, что 5-ти шагов вполне достаточно). При каждой новой сессии история начинается сначала (не запоминается/забывается). Кнопка "СБРОС" говорит сама за себя. Прокручивает документ в начало, снимает выделение, если таковое имело место быть и стирает строку поиска (история при этом не трогается). При навигации по файлам в дереве - поведение editorgadget'а аналогично нажатию на капу "СБРОС". Также поддерживаются горячие клавиши. У treegadget'a и editorgadget'а есть всплывающее меню. У каждого своё. Кнопка "Restore" - собственно восстановление всего ранее созданного архива обратно на диск. Сделано для того, чтобы иметь возможность дополнить или изменить базу, когда первоначальный исходник утерян. Также присутствует возможность выборочного экспорта (отдельно взятой папки или файла) - собственно ПКМ на treegadget'е. Внизу прикручен статусбар - подсказка для пользователя (какая директория выбрана). Ну и "Запись" - это двухпозиционная кнопка, которая сохраняет позиции окна. Если зажата, то при выходе из программы создаётся файл settings.ini.
Ну вот вроде бы и всё! Если кого-то заинтересовал, то милости прошу потестировать. Это была попытка сделать нечто вроде chm-creator'a/viewer'a толькло много проще (без поддержки стилей, не HTML, и прочего).
Не стесняйтесь, комментируйте.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: TreeGadget
СообщениеДобавлено: Чт окт 26, 2017 4:52 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 527
Благодарил (а): 51 раз.
Поблагодарили: 15 раз.
Пункты репутации: 5
А как получить все вложенные папки по клику на узле? сейчас интересуют индексы всех этих папок в дереве
код в этом посте
viewtopic.php?p=86681#p86681


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 95 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7

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


Кто сейчас на форуме

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB