XML généré : remplacer une virgule par un point [Résolu]

sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 20 févr. 2007 à 09:50 - Dernière réponse : sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention
- 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é..."
Afficher la suite 

4 réponses

Répondre au sujet
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 20 févr. 2007 à 10:12
+3
Utile
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é..."
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sphaxslayer
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 20 févr. 2007 à 10:22
+3
Utile
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]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sebmafate
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 20 févr. 2007 à 10:03
0
Utile
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]
Commenter la réponse de sebmafate
sphaxslayer 216 Messages postés mardi 5 avril 2005Date d'inscription 17 septembre 2008 Dernière intervention - 20 févr. 2007 à 10:30
0
Utile
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é..."
Commenter la réponse de sphaxslayer

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.