Sektionen aus INI FIle lesen

sand13r

Erfahrenes Mitglied
Halli Hallo liebe Freunde der Sonne!

ich hätte eine kleine Frage (mal wieder)

und zwar muss ich eine INI File auslesen und alle darin vorkommenden Sektionen rausbekommen. Der Grund dafür ist folgender das eine Sektion so zB. aufgebaut sein kann [test/xx]

also zb so.

[test/1]
..
.
.
[test/2]
.
.
.
und so weiter und ich nicht genau weiss wie oft das test drin vorkommt.
deshalb hab ich gedacht einfach alle Sektionen auslesen und dann die wo ich wirklich benötige nochmals genauer untersuchen.

Ich bin schon soweit das ich alle Sektionen raus bekomme in dem ich

Code:
GetPrivateProfileString(0,0,0,sections,256,"c:\\f.ini");


schreibe. Nun stehen alle Sektionen getrennt durch ein NULL-Zeichen in der Variable sections drin.

Mein Problem ist jetzt nur noch die in ein Array zu bekommen.
also eben die erste Sektion in [0] 2te Sektion in [1] usw. :D
Hab grad leider keine Idee wie ich das machen könnte und hatte gehofft das ich mir hier ein paar Anregungen oder Ideen einholen könnte.

Bin um jeden Tipp dankbar


Vielen dank schon mal ^^

greetz sand13r
 
Hallo, du könntest "sections" zeichenweise jeweils bis zur "0" parsen und die Einzelstrings am besten in ein dynamisches Array packen:
C++:
#include <string>
#include <vector>

....

DWORD nLen = GetPrivateProfileString(0,0,0,sections,256,"c:\\f.ini");

std::vector<std::string> arr;
std::string str = "";

for( DWORD i = 0; i < nLen; ++i )
{
    char c = sections[i];

    if( c == 0 )
    {
        arr.push_back(str);
        str = "";
    }
    else
    {
        str += c;
    }
}
Gruß
MCoder
 
Hi MCoder ^^

wen ich dir jedesmal wo du mir geholfen hast 50cent gegeben hätte wär ich heute ein armer mann xD oder du reich ..oder wie auch immer
danke auf jeden Fall schon mal.

Habs mittlerweile auch irgendwie hinbekommen aber längst nicht so schön wie deine Lösung aussieht. :D

Code:
char sections[2000];
int y=0 ,z=0;

char sectionarray[1000][30];

GetPrivateProfileString(0,0,0,sections,2000,"c:\\ts7.ini");

for(int i=0 ;i<2000;i++,z++)
{
    sectionarray[y][z]=sections[i];
    if('\0'==sections[i])
    {
       z=-1;
       y++;
    }
}

xD naja wie gesagt net so toll :D

werd mir dann wohl deins zu Gemüte ziehen :D vielen dank nochmal.. eine kurze frage noch
hat es einen bestimmten Grund wieso das char c = in der for schleife steht ? würde es sonst außerhalb initialisieren.

Ich danke dir nochmals vielmals !

hier deine 50Cent XD

geetz sand13r
 
Toll hin oder her: Auf jeden Fall hast du ja eine funktionierende Lösung erarbeitet :-)

hat es einen bestimmten Grund wieso das char c = in der for schleife steht ? würde es sonst außerhalb initialisieren.
Das ist wohl hauptsächlich eine Frage des Programmierstils. Ich strebe es immer an, die Gültigkeit von Variablen möglichst auf den Bereich zu beschränken, in dem sie verwendet werden. Im konkreten Fall ist das nur innerhalb der for-Schleife.

Gruß
MCoder
 
Ah ok super dankeschön^^

ich dachte nur das er dann jedesmal ne neue char initialisiert und dann ja den speicher zumüllt oder ? ok zugegeben heutzutage eher kein Problem mehr :D

Wenn du mir jetzt noch nen Tipp geben könntest wie ich die Inhalte von dem arr. Array nach nem String durchsuchen kann.. hab mir schon die Funktionen die vector unterstützt angeschaut aber nix gefunden auf die schnelle.. arr[ i ].Find() geht au net..
sorry hab no nie wirklich was mit vector gemacht :(

danke nochmals


greetz sand13r



ps. du kommst net zufällig aus em raum münchen damit i di mal zu nem bier einladen könnt XD
 
Ok ich habs jetzt einfach so das ich nacheinander den inhalt von dem Array wieder in den String rein schreib und dann mit str.Find() schau ob der string drin vorkommt :D

das klappt alles hervorragen.. wenn i jetzt aber den String in der WritePrivateProfileString() benutzen will meckert er natürlich wieder.. oh man :(


hat einer eine idee ? :D
 
ich dachte nur das er dann jedesmal ne neue char initialisiert und dann ja den speicher zumüllt oder ? ok zugegeben heutzutage eher kein Problem mehr :D
Nein, das ist kein Problem. Da schlagen die Optimierungsroutinen des Compilers zu, so dass die Variable nicht wirklich ständig neu angelegt wird.
wenn i jetzt aber den String in der WritePrivateProfileString() benutzen will meckert er natürlich wieder..
Du musst die Methode "c_str()" der string-Klasse verwenden.

Gruß
MCoder

P.S.: Zufällig direkt aus München. Vielleicht mal wenn's warm ist in den Biergarten.
 
Guten Morgen MCoder ^^

du bist einfach spitze funktioniert einwandfrei!!
.. hab erst versucht anstatt einem string Array ein char[50] Array zu machen
bei der zuweisung durch
PHP:
arr.push_back(str);

hat er allerdings gemeckert das keine Umwandlung von char [50] in const char[50] möglich wäre.. hast du dazu eine Idee?
also str war eben auch ein char [50] array.
Nunja nochmals vielen DANK


wünsche ein wundervolles Wochenende^^

greetz sand13r

PS. perfekt ^^ wie klein die welt doch ist ^^
 
Zurück