Datei mit Kommentaren auslesen



  • Hallo,

    bin noch Neuling und mache mich grad an mein erstes größeres C++-Projekt in einer Echtzeit-Simulation. Nun läuft das Programm schon rund und ich bin recht zufrieden. Was noch stört:

    Ich möchte gerne die Parameter der Simulation in einer Textdatei bequem editieren können - bislang muß ich immer alles im Code selbst ändern.
    Die Textdatei selbst sollte vor den Parametern selbst immer einen Kommentar haben. Ich möchte dann im Programm in einer festen Reihenfolge die Parameter auslesen können, ohne immer die Kommentare selbst identifizieren zu müssen. Die Paramter sollen auch keine char, sondern floats sein.

    Das Ganze so ungefähr so aussehen:

    //Parameter 1: Länge
    Wert

    //Parameter 2: Breite
    Wert

    usw. Die Systematik kennt man ja von diversen *.ini-Dateien.

    Nun meine Frage: Gibt es da eventuell ein Standardvorgehen oder schon ein paar fertige Klassen / Bibliotheken, um Dateien mit einer solchen Systematik auszulesen?
    Notfalls schreibe ich mir da selber etwas, aber wenn's da schon was fertiges gibt...?

    Danke,

    Tobias



  • Wo ist das Problem? Du willst ja nichts von den Kommentaren wissen. Also als 1. kommt die Anzahl der Hasen. Der Erste Kommenatr lautet also
    // Anzahl der Hasen
    843429

    Dann ließt du zwei Zeilen ein, bzw. zwei mal eine Zeile ein und speicherst den eingelesenen floatwert in der Variablen.

    Im Übrigen du musst die Kommentarzeichen nicht einfügen, das müsstest du bloß, wenn der Inhalt der Datei als C++-Code dargestellt werden soll, was er nicht soll.

    mfg



  • Ich mach das üblicherweise so:

    char buf[256];
    
    while(!feof(file))
    {
        memset(buf,0,256);
        fgets(buf,255,file);
        if(*buf == '#')
            continue;
        //Zeile verarbeiten...
    }
    

    Is irgendwie eh die Standardlösung.. 😃
    In dem Fall is halt # das Kommentarzeichen



  • würde eine lösung mit fstreams bevorzugen
    zb

    string line;
     while (getline(in,line)) {
      stringstream ss(line);
      float f;
      if (ss >> f) {
       //zahl gefunden
     }
    }
    

    muss ja nicht sonderlich ausgeklügelt sein.


Anmelden zum Antworten