Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.037 c
11-1063875922
vpivo
2003-09-18 13:05
2004.04.25
Написание редактора свойств


1-1081233763
Stas
2004-04-06 10:42
2004.04.25
Как скрыть кнопку с панели задач


6-1074424924
elected
2004-01-18 14:22
2004.04.25
TWebBrowser Открытие нового окна в том же окне


14-1080731640
peypivo
2004-03-31 15:14
2004.04.25
-


1-1081487521
cvg
2004-04-09 09:12
2004.04.25
как разбить строку по запятым?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский