begin process at 2008 07 06 02:02:35
1 205 433 membres
14 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

(LIB)CONFIGINIPARSER


Information sur la source

Catégorie :Divers Classé sous : ini parser, configuration, fichiers, classe Niveau : Débutant Date de création : 23/01/2008 Date de mise à jour : 14/02/2008 20:51:33 Vu / téléchargé: 2 791 / 39

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

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

  • #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;
  • }
#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 :) .
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

25 janvier 2008 17:51:01 :
modification du texte de la section 'source'
14 février 2008 20:51:33 :
Modification du code pour prise en compte des commentaire, les nouvelle fonctions sont 'generiques' (utilisation de templates). L'utilisation des structures 'entry' n'est plus et ne doit plus etre utilisé.
  • signaler à un administrateur
    Commentaire de LeFauve42 le 28/01/2008 12:42:59 8/10

    Salut,

    Je n'ai pas regarde dans l'archive mais j'ai quelques remarques sur ce que tu nous montre dans le post:
    - Tu sembles ne gerer que les strings. Pourquoi ne pas surcharger pour les types courrants (int, double, ...).
    - Est-ce que eraseSession() ne devrait pas s'appeler eraseSection() ?
    - Est-il bien utile d'avoir a la fois addValeur() et setValeur() ? (setValeur pourrait creer une entry si cette valeur n'existe pas deja)
    - Est-il bien utile d'avoir access aux objets entry ? Je pense que c'est ton implementation mais il faudrait masquer ca a l'utilisateur final (tu pourais rajouter un eraseValue() et un parametre optionel a setValue() pour specifier un commentaire (qui bien sur ne serait pas modifie si le parametre optionel n'est pas fourni)).

    A part ca ta classe a l'air sympa a utiliser (comme j'ai dit je n'ai pas regarde dedans).
    Continue de l'ameliorer, ce genre d'outils ca sert toujours :o).

    Eric

  • signaler à un administrateur
    Commentaire de LiRYc06 le 28/01/2008 21:03:58

    tout d'abord merci pour tes encouragements :)

    _c'est vrais je ne gere que les strings, il faudra peut etre que je surchage setValeur et addValeur (add ajoute une variable, alors que set modifie une variable existante).
    _"Est-ce que eraseSession() ne devrait pas s'appeler eraseSection() ?" bon sang ! tu as raison ! il faut que je change ca ...
    _En fait eraseEntry devrais s'appeler eraseValeur() il faut que je la renome ...
    Pour les 'entry' et les commentaires ... il faut que je pense au probleme ;) ..

    a suivre donc .....

  • signaler à un administrateur
    Commentaire de ranzi le 07/03/2008 11:38:27

    J'ai testé ta librairie et elle 8 fois plus rapide que C_Inifile. Très bon travail.

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS