Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Работа с INI файлами (узнать количество секций) (http://forum.oszone.net/showthread.php?t=135818)

crashtuak 25-03-2009 14:08 1074305

Работа с INI файлами (узнать количество секций)
 
Драсте. надо узнать количество секций в INI. Для INI с именами секций Item_х, где х - порядковый номер секции, и в каждой секции присутствует параметр name с каким небуть значением, я смог написать вот это:
Код:

TIniFile *config = new TIniFile(GetCurrentDir()+"\\config.ini");
for(int item = 0; item <= 100; item++) {
        char *myBuff;
        AnsiString strRetVal;
        myBuff = new char[100];
        memset(myBuff,'\0',100);
        itoa(item,myBuff,10);
        strRetVal = myBuff;
        delete[] myBuff;
        AnsiString check=config->ReadString("Item_"+strRetVal,  "name", NULL) ;
        if (check=="0") {
                break;
        }
        counter=counter+1
}

counter - количество секций (начальное значение counter=0). Но по понятным причинам этот код не универсальный. Кто посоветует что то по лучше?

Busla 25-03-2009 16:49 1074479

Для работы с ini-файлами рекомендуется использовать специальные функции: GetPrivateProfileString и WritePrivateProfileString.

crashtuak 25-03-2009 16:57 1074491

Цитата:

Цитата Busla
Для работы с ini-файлами рекомендуется использовать специальные функции: GetPrivateProfileString и WritePrivateProfileString. »

Так как читать\записать значение я знаю, но вот как узнать количество секций в файле, вот в чем задача!

Alan85 25-03-2009 18:15 1074588

TIniFile - если это из Borland то вот это поможет:
Код:

TStrings *sek = new TStringList() ;
TIniFile *config = new TIniFile(GetCurrentDir()+"\\config.ini");
config->WriteString("1_sek","key1","1"); // просто
config->WriteString("2_sek","key1","1"); // тестовые
config->WriteString("3_sek","key1","1"); // данные
config->ReadSections(sek); // считывает названия секций...
Memo1->Lines->AddStrings(sek);
// config->ReadSections()
sek->Free();


crashtuak 25-03-2009 19:21 1074645

Alan85, конечно промер нужный, но не для данного случая. Мне надо посчитать количество секций в произвольном файле, тоесть ты сделал какой то ini, а я программно узнал количество секций. Вот что нада!

Alan85 25-03-2009 19:30 1074659

Думал дальше сам догадаешься. Здесь создается произвольный ini файл - я тут же генерил потом считывал, а ты можешь убрать генерацию и сразу считывать. Дальше считывает все названия секций. Это дает нам кодом
Код:

sek->Count;
или
Код:

Memo1->Lines->Count;
получить количество секций

crashtuak 25-03-2009 20:10 1074701

Alan85, ты только что посвятил человека, который с С++ знакомый 4 дня:)


Время: 07:24.

Время: 07:24.
© OSzone.net 2001-