Главная страница
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.032 c
1-1105446345
Viruz
2005-01-11 15:25
2005.01.23
Exception


14-1104590288
AlterEgo of WondeRu
2005-01-01 17:38
2005.01.23
Чего бы Вы хотели достичь в 2005 году...


1-1105609637
Arm79
2005-01-13 12:47
2005.01.23
Как получить документ Word в виде картинки?


14-1104573126
Меломан
2005-01-01 12:52
2005.01.23
Чтение новостных групп


4-1101966989
SergeyDon
2004-12-02 08:56
2005.01.23
получить координаты иконок на рабочем столе!