Zeilenweise aus Ini Datei lesen und in neue Datei schreiben



  • Hi,

    ich habe eine Ini-Datei mit mehreren Sections. Jetzt will ich aus einer bestimmten Section alle Zeilen auslesen und in eine neue Datei schreiben.
    Mein Problem hierbei ist, dass es zwar die spezielle Methode GetPrivateProfileString(...) gibt, die mir gezielt eine Ini-Datei auslesen kann, allerdings erhalte ich nur den Wert einer Variablen und ich muss immer genau die Variable angeben, die ich auslesen will.

    Ich will aber nicht nur den Wert der Variablen, sondern die komplette Zeile in eine neue Datei schreiben, um sie von dort mit GetPrivateProfileString(..) auslesen zu können.

    Die Ini-Datei ist folgendermaßen aufgebaut:

    [section1]
    variable1 = x
    variable2 = y
    variable3 = z
    
    [section2]
    variable1 = z
    variable2 = y
    variable3 = x
    

    Wichtig:
    Es sollen nun aber nicht alle Zeilen neu geschrieben werden, sondern z.b. nur die von section1 oder section2.

    Ich hoffe ich habs verständlich erklärt.

    Gruß Buz 🙂



  • Die erste Möglichkeit ist es, dir zunächst mit GetPrivateProfileString() alle Namen der Sektion ausgeben zu lassen und dann in einer Schleife einzulesen und zusammen mit dem Schlüsselnamen auszugeben.

    Die zweite Möglichkeit ist es, die Datei per fstream zeilenweise einzulesen. Wenn du auf die Zeile "[section1]" triffst, beginnst du damit, alle nachfolgenden Zeilen zu schreiben, bis die nächste Zeile mit "[" kommt.



  • also wenn ich dich richtig verstanden habe, dann müsste der code hier machen was du willst.

    string section = "[section1]";
    ifstream datei;
    datei.open("pfad zu deiner datei");
    if(!datei)
    {
    	cout<<"Die angegebene Datei ist nicht vorhanden"<<endl;
    }
    else
    {
    	bool variableneinlesen = false;
    	string zeile;
    	while(!datei1.eof())
    	{
    		getline(datei, zeile);
    
    		if(zeile = "")
    		{
    			variableneinlesen = false;
    		}
    		else
    		{
    			if(variableneinlesen == true)
    			{
    				speichereZeile(zeile); //hier rufst du eine funktion auf die die übergebene zeile speichert
    						       //diese Funktion musst du allerdings noch selber schreiben
    			}
    
    			if(zeile == section)
    			{
    				variableneinlesen = true;
    			}
    
    		}
    	}
    }
    

    allerdings musst du auf die syntax deiner datei achten. die müsste ungefähr so aussehen, das erst der name kommt, dann genau im anschluss die variablen und danach muss unbedingt eine leerzeile kommen.

    ich hoffe ich konnte dir helfen.



  • Naja...

    // pseudocode:
    stream in = ...;
    stream out = ...;
    bool copy_section = false;
    string line;
    while(line = getline(in))
    {
        trimmed_line = trim(line); // whitespaces links und rechts entfernen
        if (trimmed_line starts with '[' and ends with ']')
        {
            // section header gefunden
            copy_section = (trimmed_line == "[my_section_name]"); // besser case insensitive vergleichen
        }
    
        if (copy_section)
           out.putline(line);
    }
    

    Wenn du die section header nicht mitkopieren willst wird aus dem "if (copy_section)" einfach ein "else if(copy_section)".


Anmelden zum Antworten