Форум: "Начинающим";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c