Forum Programmation.c Récupérer un xsd:decimal en C

Posté par  (site web personnel) .
Étiquettes : aucune
0
26
sept.
2005
Bonjour,

Je suis confronté à un problème que j'imagine très classique, mais c'est la première fois que je joue avec les locales.

J'ai un soft écrit en GTK. Il lit des fichiers en XML (lecture réalisée avec expat). Un des champs est un réel (xsd:decimal). Le champ en question est converti en double avec strtod.

Mon problème, c'est que l'appli se retrouve localisée (c'est bien) mais du coup, strtod ne reconnait pas la totalité du réel.
En effet, je suis dans un environnement fr_FR. Or, le xsd:decimal utilise obligatoirement le '.' (point) comme séparateur. En environnement fr_FR, strtod s'attend à trouver un ',' (une virgule).

Comment faire proprement pour récupérer cette valeur ?
J'ai pensé à modifier la locale avant strtod et la restituer après, mais c'est pas terrible.
XML étant un format d'échange, est-ce que ce n'est pas à la librairie expat de faire le boulot ?

Merci d'avance pour tous vos conseils.
  • # Réponse à moi-même

    Posté par  (site web personnel) . Évalué à 2.

    J'ai cherché un peu plus loin que le bout de mon nez.

    J'ai trouvé que la glib fournit des fonctions pour contourner ce problème. La fonction à utiliser est g_strtod.

    Si vous avez d'autres solutions, la discussion reste ouverte.
    • [^] # Re: Réponse à moi-même

      Posté par  . Évalué à 1.

      Tu dois pouvoir changer LC_NUMERIC avec setlocale temporairement à C pour faire ton strtod. Sinon tu réécris ton propre strtod ;)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.