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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-1081283134
Феликс
2004-04-07 00:25
2004.04.25
Как перемешать строки


4-1077789455
Sergej
2004-02-26 12:57
2004.04.25
Как узнать значение одного из региональных параметров?


1-1080803645
pasha_golub
2004-04-01 11:14
2004.04.25
Реализация компонента-обертки


1-1081265591
Pahan_
2004-04-06 19:33
2004.04.25
Рисование на TToolBar


1-1081249456
Назаров Евгений
2004-04-06 15:04
2004.04.25
Сравнение строк