Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Вывод ресалтов поиска   Найти похожие ветки 

 
Magic_STI   (2005-01-11 20:28) [0]

Вот столкнулся с проблемой. Есть файл с такой вот структурой:
[BZONE]
Type=Menu
Name=BZO
Title=Бла-Бла-Бла
All=2

[BZONE_BZO1]
Type=File
Content=Бла-Бла-Бла
Title=Бла-Бла-Бла

[BZONE_BZO2]
Type=Menu
Title=Бла-Бла-Бла
Name=Def
All=3

[BZONE_BZO2_DEF1]
type=Menu
....
....
....

И так до бесконечности. Так вот после поиска у меня есть массив записей типа
TSearch = record
         section:string;
         index:integer;
         intitle:boolean;
         end;

В Section записано имя секции INI-файла, если взять пример, приведенный выше, то например BZONE_BZO2_DEF1. Так вот нужно в Тривью построить дерево, в котором были бы все секции, которые являются родителями найденное например для секции BZONE_BZO2_DEF1 дерево будет выглядеть так:
BZONE
 BZONE_BZO2
   BZONE_BZO2_DEF1

Как это можно БЫСТРО реализовать? Я сделал, вроде работает, но настолько медленно, что я успеваю хорошо в кресле потянуться, пока оно добавит 50 элементов. Как можно сделать, чтобы побыстрее?

З.Ы. Я конечно немного непонятно выражаюсь, но надеюсь на ваше понимание %)


 
begin...end ©   (2005-01-11 22:16) [1]

> Magic_STI   (11.01.05 20:28)

Я бы загрузил файл в StringList, и потом уже с ним работал.

Примерно так:

var
 I, L, Index: Integer;
 S, Section: String;
 ParentNode: TTreeNode;
begin
 Section := {имя секции};
 Section := "[" + Section + "]";
 with TStringList.Create do
   try
     LoadFromFile("C:\MyFile.ini");
     Index := IndexOf(Section);
     if Index >= 0 then
     begin
       ParentNode := TreeView.Items.Add(NIL, "Дерево ini-файла");
       for I := 0 to Index do
       begin
         S := Strings[I];
         L := Length(S);
         if L > 0 then
           if (S[1] = "[") and (S[L] = "]") then
             ParentNode := TreeView.Items.AddChild(ParentNode, S)
       end
     end
   finally
     Free
   end
end.


А в том случае, если заданная секция (Section) гарантированно встречается в файле (а следовательно, и в StringList), то можно обойтись и без IndexOf, а просто сразу идти от начала списка, добавляя имена секций в TreeView, до тех пор, пока в списке не встретится Section.

P.S. Ни в коем разе не претендую на оптимальность.


 
Palladin ©   (2005-01-11 22:19) [2]


> Как это можно БЫСТРО реализовать?

ОТКАЗАТЬСЯ от INI файлов.


 
Magic_STI   (2005-01-12 19:39) [3]

Хм... зачем? Меня они вполне устраивают скоростью... Дело в том, что полнотекстовый поиск в TMemIniFile размером 1,6 мегов идет от силы секунды 3... а то и меньше... Но вот добавляет он результаты как черепаха... Может дело в Treeview?


 
begin...end ©   (2005-01-12 19:42) [4]

> [3] Magic_STI   (12.01.05 19:39)

TTreeView.Items.[BeginUpdate, EndUpdate] ?

P.S. А [1] Вы пробовали?


 
Magic_STI   (2005-01-12 19:54) [5]

куда ж без этого... и сортировку выключил...



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
14-1104427648
@BraIN
2004-12-30 20:27
2005.01.23
Проблема со зрением


1-1105450596
VfloverW
2005-01-11 16:36
2005.01.23
Прозразчный TImage


10-1080915614
Zvey
2004-04-02 18:20
2005.01.23
создание OPC-клиента


14-1104714149
Xenon
2005-01-03 04:02
2005.01.23
Ну зацените плиз


1-1105264235
гость
2005-01-09 12:50
2005.01.23
электрические схемы