Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
14-1104573126
Меломан
2005-01-01 12:52
2005.01.23
Чтение новостных групп


4-1100617539
grigory
2004-11-16 18:05
2005.01.23
чтение FAT


14-1104637934
Думкин
2005-01-02 06:52
2005.01.23
С днем рождения! 2 января


1-1105534232
nicesc
2005-01-12 15:50
2005.01.23
Динамический массив и чтение из файла...


10-1081171895
LittleSpo
2004-04-05 17:31
2005.01.23
COM и события





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский