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

Вниз

ini-file   Найти похожие ветки 

 
vasIZmax ©   (2007-09-15 23:50) [0]

Подскажите как можно посчитать секции в ini-файле?
Файл выглядит таким образом:
[id1]
******
[id2]
******
.......
[id340]
****

Пробую ini.ReadSections(listBox1.Items); выводит все секции какие есть в листбокс, это хорошо. А вот количество таких секций сколько будет? Или считывать в листбокс, а потом в нем посчитать строчки?

ЗЫ. надо что бы по нажатию на кнопку появлялось случайное сообщение записанное в ини-файле, т.е. showmessage (ini.ReadString("id"+random(от_общего_количества_секций), "task", "default value"));


 
DrPass ©   (2007-09-16 00:22) [1]

ListBox1.Items.Count. Или, если отображать не надо, возьми TStringList


 
vasIZmax ©   (2007-09-16 00:41) [2]

> DrPass ©   (16.09.07 00:22) [1]

Сделал так

  d:=tstringlist.Create;
  ini := TIniFile.Create("d:\75\task2.ini");
  try
    ini.ReadSections(d);
  finally
    ini.Free;
  end;
  caption:=inttostr(d.Count);
  d.Free;

В принципе тоже самое решение, о котором я говорил в [0].
Думал другие варианты есть.


 
Германн ©   (2007-09-16 01:15) [3]


> Думал другие варианты есть.

Есть и другие, но этот самый простой и лучший.


 
{RASkov} ©   (2007-09-16 11:38) [4]

> [2] vasIZmax ©   (16.09.07 00:41)
> Думал другие варианты есть.

Есть... держи

function GetCountIniSections(const FFileName: TFileName): Integer;
const BufSize = 16384;
var Buffer, P: PChar;
begin
 GetMem(Buffer, BufSize);
 Result:=0;
 try
  if GetPrivateProfileString(nil, nil, nil, Buffer, BufSize, PChar(FFileName)) <> 0 then begin
   P := Buffer;
   try
    while P^ <> #0 do begin
     INC(P, StrLen(P) + 1);
     INC(Result);
    end;
   except Result:=0; end;
  end;
 finally
  FreeMem(Buffer, BufSize);
 end;
end;


:)

Использовать так:
procedure TForm1.Button1Click(Sender: TObject);
begin
if FileExists(<name.ini>) then
 ShowMessage(IntToStr(GetCountIniSections(<name.ini>)))
else ShowMessage("No File");
end;


 
Anatoly Podgoretsky ©   (2007-09-16 11:44) [5]

> vasIZmax  (15.09.2007 23:50:00)  [0]

Странное решение, обычно делают одну секцию и множестов параметров.
При таком подходе ты быстро споткнешься на ограничение в 64Кб и половина информации не нужная, рассходуется на секции, вместо параметров.


 
DrPass ©   (2007-09-16 12:06) [6]


> При таком подходе ты быстро споткнешься на ограничение в
> 64Кб

Это еще надо постараться в ini-файл поместить параметров на 64Кб :)


 
Anatoly Podgoretsky ©   (2007-09-16 12:24) [7]

> DrPass  (16.09.2007 12:06:06)  [6]

Cложно что ли, с дуру и лом можно сломать.
Но я то говорил не о 64К, это было просто дополнением, а о извращеной стратегии построения ини, когда параметры стали секциями.


 
vasIZmax ©   (2007-09-16 13:45) [8]

> {RASkov} ©   (16.09.07 11:38) [4]

спс, буду разбираться.


> Anatoly Podgoretsky ©   (16.09.07 11:44) [5]

Я не стал приводить полностью вид ини, а в общих чертах его описал. На самом деле в каждой секции несколько параметров (на данный момент = 7). А вот насчет 64 кб - это спс, что предупредили, мог "накосячить" по незнанию своему.


> Anatoly Podgoretsky ©   (16.09.07 12:24) [7]

Стратегия неважная, но проста в реализации. Первоначально хотел все делать через БД, но программа ненастолько ценная, что бы еще с БД "заморачиваться", а с ини и на другую машину-то перенести - раз плюнуть, меньше головной боли...


 
Sairex ©   (2007-10-08 12:51) [9]

Вроде бы в модуле INIFiles есть функция которая выводит количество секций(параметров) или я ошибаюсь...



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
2-1191383815
Alex_Y
2007-10-03 07:56
2007.10.28
GetTextExtentPoint


2-1191562040
Штучка
2007-10-05 09:27
2007.10.28
Как зафиксировать столбцы в DBGridEh


15-1190408875
Kostafey
2007-09-22 01:07
2007.10.28
С днем рождения ! 22 сентября


15-1191183624
SergejSim
2007-10-01 00:20
2007.10.28
Приглашаем добровольцев на Легендарный проект TTD


2-1191699591
Антон Шестаков
2007-10-06 23:39
2007.10.28
QuickRep