(lib)configiniparser

Description

Classe C++ pour lire, éditer, et sauver les fichiers de configuration de type .INI .

bool open(const string fichier="config.ini");
bool save(const string fichier="config.ini");

entry getEntry(const string& section,const string& variable);

string getValeur(const string& section, const string& variable); //old way
template<class T>
bool getValeur(const string& section, const string& variable, T& destination);
string getComment(const string& section, const string& variable);

bool addEntry(const string& section, const entry& e); //a eviter

bool addComment(const string& section, const string& commentaire); //en debut de section
bool setComment(const string& section, const string& variable, const string& commentaire); //sur une ligne

template<class T>
bool setValeur(const string& section, const string& variable , const T& valeur);
template<class T>
bool addValeur (const string& section, const string& variable , const T& valeur); //forme generique

bool addSection(const string& section, const unsigned int& position);
bool eraseEntry(const string& section, const string& variable);
bool eraseSection(const string& section);

Source / Exemple :


#include <iostream>
#include "ConfigIniParser.hpp" //classe ConfigIniParser, namespace cip

using namespace std;

int main()
{
    /** OUVERTURE */
    //Creation de l'objet config avec ouvertur automatique du fichier
    cip::ConfigIniParser config("TEST.INI");

    /**LECTURE */
    //Recuperation d'une valeur 'vitesse' dans la section 'PARAMETRE' !case sensitive!
    if(config.getValeur("PARAMETRES","vitesse")!=cip::ERREUR){
    cout<<"Vitesse (String)="<<config.getValeur("PARAMETRES","vitesse")<<" ; ";
    }
    cout<<"Commentaire de fin de ligne : "<<config.getComment("PARAMETRES", "vitesse")<<endl;

    //Recuperation d'une valeur 'vitesse' dans la section 'PARAMETRE' !case sensitive!
    //Methode permettant de demander un 'format' de retour -> true si ok
    int vitesse_int;
    if(config.getValeur("PARAMETRES","vitesse",vitesse_int)){
        cout<<"Vitesse (int)="<<vitesse_int<<endl;
    }else{
        cout<<"Impossible de convertir 'vitesse' en int"<<endl;
    }
    double vitesse_dbl;
    if(config.getValeur("PARAMETRES","vitesse",vitesse_dbl)){
        cout<<"Vitesse (double)="<<vitesse_dbl<<endl;
    }else{
        cout<<"Impossible de convertir 'vitesse' en double"<<endl;
    }

    /** ECRITURE */
    //ajout d'une [SECTION],index retourne true si ok.
    if(config.addSection("TEST",config.end() ) )cout<<"VALEUR CORRECTEMENT AJOUTEE"<<endl;

    //ajouter un couple 'variable/valeur'
    //la variable est un string, la valeur peut etre de plusieurs types
    config.addValeur("TEST","variable_string","valeur");
    config.addValeur("TEST", "variable_int", 10);
    config.addValeur("TEST", "variable_double", 12.3254e-5);

    //changer une valeur existante
    if(config.setValeur("TEST","starts",2))cout<<"VALEUR MODIFIE"<<endl;

    //effacer une cip::entry / valeur du fichier (en memoire) -> true si ok
    config.eraseEntry("PARAMETRES","vitesse");
    //effacer une [SESSION] (en memoire) -> true si ok
    config.eraseSection("PORTS");

    /**COMMENTAIRES*/
    //ajouter un commentaire au debut du fichier
    if(config.addComment(cip::ENTETE,"Ligne De Commentaire en plus au debut du fichier")) \
        cout<<"COMMENTAIRE AJOUTE"<<endl;
    //ajouter un commentaire en debut de section
    config.addComment("TEST","Commentaire de debut de section");
    //ajouter un commentaire en fin de ligne ? -> true si ok
    config.setComment("TEST","variable_double","convertion automatique");

    /**SAUVEGARDE*/
    //Sauvegarde: retourne true si ok
    if(config.save("TEST2.INI"))cout<<"SAUVEGARDE OK"<<endl;
    cout << "FIN DU TEST"<< endl;

    system("PAUSE");
    return 0;
}

Conclusion :


Ne trouvant pas mon bonheur dans ce que j'ai pu trouver sur le net et ici, j'ai decidé de faire cette petite classe. Elle remplie toutes les fonctions que je m'etait fixé. En utilisant cette classe, on arrive à lire et modifier/sauver un fichier .ini en gardant les eventuels commentaires et sa structure.
C'est mon premier post, il faut etre indulgent :) .

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.