![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывод ресалтов поиска [D7, WinXP]
Magic_STI © (2005-01-11 20:28:00)Вот столкнулся с проблемой. Есть файл с такой вот структурой:
[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 элементов. Как можно сделать, чтобы побыстрее?
З.Ы. Я конечно немного непонятно выражаюсь, но надеюсь на ваше понимание %)
Magic_STI (2005-01-12 19:54:00) [1]куда ж без этого... и сортировку выключил...
begin...end (2005-01-12 19:42:00) [2]> [3] Magic_STI (12.01.05 19:39)
TTreeView.Items.[BeginUpdate, EndUpdate] ?
P.S. А [1] Вы пробовали?
Magic_STI (2005-01-12 19:39:00) [3]Хм... зачем? Меня они вполне устраивают скоростью... Дело в том, что полнотекстовый поиск в TMemIniFile размером 1,6 мегов идет от силы секунды 3... а то и меньше... Но вот добавляет он результаты как черепаха... Может дело в Treeview?
Palladin (2005-01-11 22:19:00) [4]
> Как это можно БЫСТРО реализовать?
ОТКАЗАТЬСЯ от INI файлов.
begin...end (2005-01-11 22:16:00) [5]> 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. Ни в коем разе не претендую на оптимальность.