Config-Datei schreiben / auswerten



  • Hallo,

    ich möchte eine Config-Datei schreiben.

    Jeder Datensatz soll in eine eigene Zeile geschrieben werden.
    Ein Datensatz aus Zeile X soll abgeholt werden oder neu beschrieben werden.

    Gibt es dafür fertige Methoden?
    Oder was brauche ich, um das zu realisieren?

    Herzlichen Dank!

    Auf dem Stand bin ich 🙂

    ifstream f;
    f.open("/home/dude/x/config",ios::in);
    getline(f,buffer);
    f.close();
    


  • ich möchte eine Config-Datei schreiben.

    Schreiben bedeuted output ...



  • hi,

    am einfachsten kannst du deine Daten mit einer TStringList verwalten.

    //zum Einladen der Daten
            TStringList *Liste;
            Liste = new TStringList;
            Liste->LoadFromFile("C:\\Daten.cfg");
    
            //abspeichern aller Daten
            Liste->SaveToFile("C:\\Daten.cfg");
    
            //Einen Eintrag Hinzufügen aus der Liste
            Liste->Add("irgendetwas");
    
            //Zugriff auf deine Liste um einen Datensatz zu lesen
            AnsiString Zeile1 = Liste->Strings[0];   //<- erste Zeile
            AnsiString Zeile2 = Liste->Strings[1];   //<- zweite Zeile
    
            //Einen Datensatz in deiner Liste überschreiben
            Liste->Strings[0] = "ich bin die erste zeile";
            Liste->Strings[1] = "ich bin die zweite zeile";
    
            //Einen Datensatz löschen
            Liste->Delete(0);       //erster Datensatz wird gelöscht
    
            //Beim beenden deines Programms immer den Speicher Freigeben
            delete Liste;
    

    nur ein weg um daten zu laden und zu speichern.
    Es gibt mit Sicherheit tausende Methoden
    und komplexere mit Trennzeichen/Seperator und und und !

    bye


  • Administrator

    @Bernd_,
    TStringList , genauso wie AnsiString , ist kein Standard C++! Hast du dich im Forum vertan? 🙂

    Grüssli



  • Ja , S O R R Y ! Habe ich gerade mitbekommen.

    tut mir ja echt leid.



  • Danke, was muss ich für TStringList includen?



  • Allerdings verwende ich nicht VCL (C++ Builder).

    Beim Kompilieren erhalte ich folgenden Fehler:
    Fehler: >>TStringList<< wurde in diesem Gültigkeitsbereich nicht definiert
    Fehler: >>Liste<< wurde in diesem Gültigkeitsbereich nicht definiert
    Fehler: expected type-specifier before >>TStringList<<
    Fehler: expected ; before >>TStringList<<

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
       TStringList *Liste = new TStringList;
       Liste->LoadFromFile("home/x/testlist");
    
       Liste->Stirngs[0] = "xxxxxxxxxxx";
       string zeile = Liste->Strings[0];
    
       cout << "zeile 1 = " << zeile << endl;
    
       //delete Liste;
    
       return 0;
    }
    


  • cpp_anfaenger schrieb:

    Allerdings verwende ich nicht VCL (C++ Builder).

    Dann hast du vermutlich schlechte Karten, wenn du trotzdem die C++ Builder eigenen Klassen benutzen willst. Du könntest stattdessen std::list mit std::strings benutzen. (erstere gibts im header <list>)



  • Geht das Verwalten von Dateien dort ähnlich einfach?
    Mit welchen Funktionen ist >>list<< beschrieben?



  • list ist keinen Funktion, sondern eine Klassen Template. Unter anderem findest du das hier:

    http://www.cplusplus.com/reference/



  • Danke. Könnt ihr mir bitte Tipps geben wie ich die obige Aufgabe lösen könnte?



  • Die verwendung von Containern und das Lesen und Schreiben von strings in Dateien sollte eigentlich in jedem halbwegs guten Buch und Tutorial behandelt werden.



  • cpp_anfaenger schrieb:

    Danke. Könnt ihr mir bitte Tipps geben wie ich die obige Aufgabe lösen könnte?

    Schreib doch erstmal ein paar Zeilen in eine Datei rein.
    Dann lies die Datei in einen vector, oder eine list ein und du hast so gut wie gewonnen! 🙂



  • hast du ein Beispiel dafür? 🙂

    Das Auslesen ist kein Problem.
    Aber wie kann ich eine bestimmte Zeile der Datei beschreiben?



  • cpp_anfaenger schrieb:

    hast du ein Beispiel dafür? 🙂
    Aber wie kann ich eine bestimmte Zeile der Datei beschreiben?

    Das dürfte in Deinem Fall nur sehr umständlich (wenn überhaupt) möglich sein. Besser (einfacher) ist es, die ganze Datei einzulesen, Deine Änderungen vorzunehmen, und die ganze Datei wieder wegzuschreiben.



  • Das ist leichter ja, aber eine unschöne Lösung, wenn die Datei über mehrere Seiten geht.
    Sowas wie TStringList wäre perfekt.



  • cpp_anfaenger schrieb:

    Das ist leichter ja, aber eine unschöne Lösung, wenn die Datei über mehrere Seiten geht.
    Sowas wie TStringList wäre perfekt.

    Mit TStringList ist das auch nicht anders, da müsstest du auch die komplette Datei in die Stringliste laden, dort bearbeiten und am Ende wieder abspeichern.



  • cpp_anfaenger schrieb:

    hast du ein Beispiel dafür? 🙂
    Das Auslesen ist kein Problem.
    Aber wie kann ich eine bestimmte Zeile der Datei beschreiben?

    Eine Datei zeilenweise einzulesen und in die einzelnen Zeilen 'reinzugucken' ist ja kein Problem, das weißt du auch.
    Du musst dir ein Format ausdenken, wie du deine Zeile bzw. deinen Datensatz aufbauen willst - dementsprechend wird das auch in einzelne Bestandteile zerlegt.



  • nein ich weiß nicht wie man eine Datei zeilenweise beschreibt, wie man alles in eine Zeile schreibt.

    Wie liest man zeilenweise ein und aus ?



  • Das zeilenweise schreiben hab ich nun hingekriegt 🙂

    fstream f
    f.open("xxx",ios::out);
    for (i= 1; i < 11; i++ )
    {
        f << "zeile" i+1 << "\n";
    }
    f<<endl;
    f.close();
    

    Jetzt würd ich nur noch gerne Zeile X aus der Datei auslesen können.


Anmelden zum Antworten