Главная страница
    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.46 MB
Время: 0.042 c
8-1168460554
andr1962
2007-01-10 23:22
2007.10.28
DirectDraw


15-1190688286
Slider007
2007-09-25 06:44
2007.10.28
С днем рождения ! 25 сентября 2007 вторник


15-1190699158
YuriKoltsov
2007-09-25 09:45
2007.10.28
Printer selected is not valid


15-1190620175
Галинка
2007-09-24 11:49
2007.10.28
Редактировать под Windows, компилировать под Линуксом


2-1191823092
Kolan
2007-10-08 09:58
2007.10.28
Как запретить перерисовываться TScrollBox у?





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