Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизIni файл и TTree View Найти похожие ветки
← →
Intruder (2004-04-06 13:25) [0]Господа программисты, есть вопрос такого содержания:
хочется сделать конфигуратор ini файла в виде дерева (то есть ветка главная - раздел ini файла, а поддеревья (ноды) - названия переменных и их значения, как проще это дело обработать? если есть полезные ссылки то с удовольствием посмотрю.
← →
pasha_golub © (2004-04-06 13:35) [1]Ну, вообщем-то задача простая. Потому как максимальная глуюина иерархии два уровня. Посему
var
F: system.text;
s:string;
tv: TTreeView;
Node;
begin
...
assignfile(f,..);
Reset(f);
while not eof(f) do
begin
readln(F,s);
if pos("[",S)>0 then
Node := tv.Items.Append(nil,S)
else
tv.Items.Append(Node,S);
end;
closefile(f);
end;
Набирал тут, еще нужно проверить всякие ошибки и т.д.
← →
TUser © (2004-04-06 13:41) [2]Посмотри, как это реализовано в TheBat - при импорте адресной книги в ini-файл.
← →
Intruder (2004-04-06 15:10) [3]Эта строка что значит?
F: system.text;
← →
Intruder (2004-04-06 15:22) [4]И еще вопрос по поводу объявления переменных, у меня не проходит переменная node как быть?
← →
pasha_golub © (2004-04-06 15:37) [5]Я ж писал шо набирал прям тут. Неззя дословно все копировать, нужно иногда мозг включать.
1. Строка F: system.text означает, что мы объявляем переменную с типом text из модуля System, можно просто писать text. Это я на всякий случай.
2. Не Node, а Node: TTreeNode.
3. tv:ttreeview не нужно, везде вместо tv писать имя своего дерева.
← →
dmitry99 © (2004-04-06 18:06) [6]
> pasha_golub © (06.04.04 13:35) [1]
Идея хорошая, но так делать не надо.
Если, например, значение ключа содержит символ "[" - работать будет неверно.
PS ... или надо доработать идею
PS ... и убрать другие ошибки.
← →
dmitry99 © (2004-04-06 18:11) [7]
> Intruder (06.04.04 13:25)
В рамках концепции Delphi по работе с INI-файлами могу предложить делать так:procedure IniToTree(FNameIni: string; Tv: TTreeView);
var
Ini: TIniFile;
I,J: Integer;
Parts, Keys, VaLues: TStringList;
PartNode: TTreeNode;
begin
if not FileExists(FNameIni) then Exit;
Ini := TIniFile.Create( FNameINI );
Parts:=TStringList.Create;
Keys:=TStringList.Create;
VaLues:=TStringList.Create;
try
// читаем названия всех разделов
Ini.ReadSections(Parts);
// для каждого раздела :
for I:=0 to Parts.Count-1 do begin
// создаем корневой узел дерева
PartNode:=Tv.Items.Add(nil,Parts[I]);
// читаем все ключи раздела
Ini.ReadSection(Parts[I],Keys);
// читаем значения всех ключей
Ini.ReadSectionValues(Parts[I],Values);
// для каждого ключа текущего раздела
for J:=0 to Keys.Count-1 do
// в дереве создаем узел-лист
Tv.Items.AddChild(PartNode,Values[J]);
end;
finally
Ini.Free;
Parts.Free;
Keys.Free;
VaLues.Free;
end;
end;
← →
pasha_golub © (2004-04-06 18:30) [8]dmitry99 © (06.04.04 18:06) [6]
ДА, да и еще раз да. Но уж по мне лусше написать процедурку, чем городить огород с классами TIniFile. С уважением.
← →
dmitry99 © (2004-04-06 19:21) [9]
> pasha_golub © (06.04.04 18:30) [8]
В случае "очень больших" INI-файлов я бы и сам предпочел твой вариант. Поэтому, с уважением - взаимно.
← →
Intruder (2004-04-07 12:04) [10]Ну вот пришлось мне с ini файлами возиться - так как клиент попросил именно такую ситуацию обработать :)
← →
Intruder (2004-04-07 12:04) [11]Ну вот пришлось мне с ini файлами возиться - так как клиент попросил именно такую ситуацию обработать :)
← →
pasha_golub © (2004-04-07 12:11) [12]Intruder (07.04.04 12:04) [10]
Ну и что не понятно?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c