Главная страница
    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.035 c
3-1080472821
Крутыш
2004-03-28 15:20
2004.04.25
как грамотно организовать партионный учёт на складе


14-1080757008
gn
2004-03-31 22:16
2004.04.25
хочу похвастатся моя любимая написала первую программу


1-1081491659
Max_
2004-04-09 10:20
2004.04.25
Функция POS - поиск в обратном направлении


6-1078175573
TALLA
2004-03-02 00:12
2004.04.25
Как избавиться от многопоточности DdeClientConv ? :(


1-1081099785
Stratos
2004-04-04 21:29
2004.04.25
WebBrowser





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