Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.043 c
2-1191865439
smartleds
2007-10-08 21:43
2007.10.28
Господа , подскажите плз как завести массивы для открываемых


15-1190962373
shlst
2007-09-28 10:52
2007.10.28
А кто тут самый умный?


8-1168521455
Umka
2007-01-11 16:17
2007.10.28
Кадры и потоки как ресурс DirectShow


3-1182345924
ambhtr
2007-06-20 17:25
2007.10.28
Как правильно удалить созданный в Run Time индекс?


3-1182508157
AleksandrR
2007-06-22 14:29
2007.10.28
Рисунок в DBGrid





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