Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.022 c
6-1077948390
shtacs
2004-02-28 09:06
2004.04.25
TWebBrowser для ОффЛайн! Как реализовать?


3-1080447814
Артем К.
2004-03-28 08:23
2004.04.25
Как сохранить в таблицу DB значение вычисляемого поля


3-1080666292
pashtet
2004-03-30 21:04
2004.04.25
Как из InterBase а закачать данные в Oracle?


9-1068037261
Delpher_Gray
2003-11-05 16:01
2004.04.25
Изображения большого размера в PowerDraw !?!


1-1081343059
Ne_Vaszno
2004-04-07 17:04
2004.04.25
Взаимодействие нескольких TStringList




   Наверх