IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Parser config file pour variable en #define


Sujet :

C

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut Parser config file pour variable en #define
    Bonjour,

    Dans mon programme C je souhaiterais lire un fichier .conf de la forme:

    [program]

    CST1=val1
    CST2=val2

    J'ai vu pas mal de solution de file parser sur le net notamment avec les fonctions GetPrivateProfileString ou GetPrivateProfileInt, mais mon problème est que je souhaiterais que la variable CST1 soit defini en #define dans mon code C avec la valeur val1 lu dans le fichier de config ou avec une valeur par default val1_default si il n'y a pas de config file en argument.
    la valeur val1_default serai defini comme ca:

    #define CST1_DFLT val1_default

    comment definr ma valeur CST1?

    si je fais :
    GetPrivateProfileString("program", "CST1", CST1_DFLT,CST1, ???,"test.conf");
    il me dit CST1 undefined.. forcement.. et que mettre pour la size a la place des ???

    Quelqu'un aurait il une idée? un exemple?
    Merci

    gevig

  2. #2
    Invité
    Invité(e)
    Par défaut
    A ma connaissance il n'est pas possible de modifier un define, car les valeurs sont remplacées à la compilation.
    Les define ne sont donc pas une bonne piste...

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut
    Il n est pas possible de modifier un define mais est il possible de creer un define a partir d une valeur dans un fichier de config?

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Non.

    Tu peux définir un objet CST1 du type adéquat, l'initialiser dans ton programme avec une valeur par défaut et si tu as un fichier de configuration charger cet objet avec la valeur figurant dans ce fichier.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut
    merci pour ta reponse diogene. J'ai donc abandonner mon idee de define. Je veux donc maintenant utiliser GetPrivateProfileString ou GetPrivateProfileInt, mais j'ai toujours des error "runtime check failure" ou autre. J'ai bien essayer de faire des copier coller d'exemple d'autre forum sur le sujet mais je n'obtient pas ce que je veux:
    donc je voudrais tout simplement faire:

    ********************
    int test;
    GetPrivateProfileString("DBE", "MaxGain", "0", test, 100, "parameter.ini" );

    sachant que mon parameter.ini comporte:

    [DBE]
    MaxGain = 10
    ************************
    et je m'attend a avoir test=10; Mais ce ne marche pas. Si je definis test en type char (char test[100]), je n'ai pas d'erreur mais j'obient test[0]=48 '0' et test[1]=0.. et je ne comprend pas a quoi cela correspond.

    Pouvez vous m'aider a corriger ce bout de code avec GetPrivateProfileString ou alors m'indiquer une fonction qui fera cela aussi simplement (je ne ve pas un code surcharger comme je trouve dans beacuoup d'exemple sur internet).

    quel est la diff entre GetPrivateProfileString et GetPrivateProfileInt?


    merci

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    D'apres la doc sur MSDN, la fonction GetPrivateProfileString() renvoie la chaine de caractères (correspondant à la section et à la clé spécifiée) dans le tableau figurant en 4ième paramètre.
    Si cette chaine est censée représenter un nombre, il faut ensuite la convertir.

    Le code attendu est alors du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char tab[100];
    long test;
    GetPrivateProfileString("DBE", "MaxGain", "0", tab, 100, "parameter.ini" );
    // conversion en int 
    test = strtol(tab,NULL,10);
    GetPrivateProfileInt() est dédiée à la lecture de paramètres entiers (non signés) et réalise la conversion chaine de caractères -> entier. Elle semble être plus appropriée dans ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UINT test = GetPrivateProfileInt("DBE", "MaxGain", 0, "parameter.ini" );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 30/07/2012, 16h33
  2. Bacth file pour parser le contenu d'une variable
    Par babiêtiguiya dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 26/02/2012, 02h15
  3. Réponses: 6
    Dernier message: 16/03/2005, 14h44
  4. [RAID] config mini pour mise en place RAID 10
    Par netah25 dans le forum Composants
    Réponses: 4
    Dernier message: 27/01/2005, 16h32
  5. [DOM] parser une String pour en faire un document XML
    Par Fladnag dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 29/03/2004, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo