XML généré : remplacer une virgule par un point

Résolu
sphaxslayer Messages postés 216 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 17 septembre 2008 - 20 févr. 2007 à 09:50
sphaxslayer Messages postés 216 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 17 septembre 2008 - 20 févr. 2007 à 10:30
Bonjour à toutes et à tous,

Je vous présente mon projet rapidement : j'utilise un http://msdn.microsoft.com/library/FRE/cpref/html/frlrfsystemxmlxmltextwriterclasstopic.asp&&DI=' target='_blank'>6024&IG=831c2e389d3145c88ab26a7bc1139392&POS=1&CM=WPU&CE=1&CS=AWP&SR=1 XmlTextWriter pour générer un fichier RDL (Report Definition Language) dans lequel je dois utiliser les éléments <Top>...</Top>, <Left>...</Left> etc..... Dans ces balises, il est nécessaire de mettre des valeurs décimales, or, les décimales doivent avoir un separator de type "." (point) et non "," (virgule). J'ai besoin de passer par un type numérique (Double, Decimal à la rigueur si vous me le conseillez...) car à chaque tour de boucle dans laquelle un nouvel objet XML contenant ces balises est généré, je dois augmenter ces valeurs...

Le problème maintenant : bien il est simple, mais je n'arrive pas à le solver :( En passant un double, je me retrouve avec un nombre à virgule dans le XML....Je me suis donc dit "ok, je vais faire une fonction rapide qui convertit mon Double en String, et il sera forcé de prendre le point comme séparator !" (à noter que la fonction chargée de la génération de la balise prend en paramètre des String). Ma question est donc, comment me débrouiller pour qu'il prenne réellement en compte un . et non une , ?

Voici un petit exemple du code pour éclaircir un peu :

                    [...]
                    // Elément TextBox <nomColonne>_UNITE
                    writerXml.WriteStartElement("Textbox");
                    writerXml.WriteAttributeString("Name", nomCol + "_UNITE");
                    writerXml.WriteElementString("Width", "1.5in");
                    writerXml.WriteElementString("Height", ".5in");
                    writerXml.WriteElementString("Left", doubleFrToUk(coefLeft + 0.4) + "in"); // doubleFrToUk( ) ci-dessous
                    [...]

== === 1ère version =====

private string doubleFrToUk(double input)
{
       string result = Double.Parse(input.ToString(), System.Globalization.NumberStyles.Float).ToString();
       return result;
} // doubleFrToUk()
2eme version

private string doubleFrToUk(double input)
{
       string result = input.ToString();
       if (result.Contains(","))
       {
             result.Replace(",", ".");
        }
        return result;
} // doubleFrToUk()

Voilà, je suis assez
embêté par ce détail...je vais regarder si on ne peut pas configurer
quelque chose dans VS (je suis sous Visual Studio 2005 au passage, .NET
2.0) pour le Locale de la génération quelque chose comme ça car je
bloque depuis hier.... :(


Merci à vous !

"Un seul Être vous manque, et tout est dépeuplé..."

4 réponses

sphaxslayer Messages postés 216 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 17 septembre 2008
20 févr. 2007 à 10:12
Salut Sébastien,

merci pour ta réponse, mais comment lui préciser ça ? enfin, est-ce dans le code ou dans la conf de VS...? Autrement puisque tu es consultant C# je suppose que tu es suffisamment calé pour me diriger sinon ça ne fait rien : j'ai trouvé la classe XmlConvert et plus particulièrement sa méthode ToString(double d) qui convertit un double en string...Je suppose cette méthode plus propre que de toucher la conf de VS, qu'en penses-tu ? en revanche, s'il s'agit de configurer mon writer ou mon flux (qui est en UTF-8 au passage) lequel des deux procédés seraient le plus adapté et surtout le plus "clean" ?

Merci de ta réponse !

"Un seul Être vous manque, et tout est dépeuplé..."
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
20 févr. 2007 à 10:22
Non... pas besoin de toucher à la configuration de VS2005...

En gros, dans ta méthode DoubleFrToUk fait ceci :

public string DoubleFrToUk(Double d) {
   CultureInfo ci = new CultureInfo("en-US", false);

   return d.ToString(ci);
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
20 févr. 2007 à 10:03
il faut que tu précises lors de l'export que tu veux utiliser en-US comme localisation. Sinon, par défaut, il prend la locale de la machine... donc fr-FR.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
sphaxslayer Messages postés 216 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 17 septembre 2008
20 févr. 2007 à 10:30
Hmmm...Tout simplement ! Ben merci bien !

Bah en tous cas, le XmlConvert.ToString(double d) fonctionne aussi....je viens de finir mes tests !

Voilà peut-être un petit bout de code pour montrer son utilisation, si simpliste soit-elle, pour les futurs quémandeurs ;-)

                    [...]
                    writerXml.WriteElementString("Width", "1.5in");
                    writerXml.WriteElementString("Left", XmlConvert.ToString(distLeft) + "in"); // distLeft étant mon double...
                    [...]

Je valide donc nos 2 réponses car dans mon cas, le XmlConvert me convient mieux (notamment pour les calculs à la volée à effectuer sur le double, ça alourdit moins le code) mais ta méthode était ce que je cherchais en réalité au départ.... Merci encore !

Vincent

"Un seul Être vous manque, et tout est dépeuplé..."
0
Rejoignez-nous