Regex et Parse

Résolu
cs_cordiste Messages postés 6 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 6 mai 2008 - 5 mai 2008 à 23:34
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009 - 6 mai 2008 à 19:12
Bonsoir à tous,

Je débute en c#, et je viens vers vous à la recherche d'une peu d'aide.

J'ai la chaine suivante :
0.1234567891000.9

dans laquelle je souhaire récupérer les valeurs numériques afin de réaliser une opération mathématique sur chaque valeur, puis les remplacer par le nouveau résultat.

J'ai réussi (difficilement) à écrire ceci afin de récupérer les valeur dans un tableau :

string str = " 0.123456789 1000.9";

Regex regex = new Regex(@"(?[0-9.]+)");

MatchCollection matches = regex.Matches(str);

Je bloque maintenant sur le "parsage" pour  pouvoir  réaliser une opération mathématique sur ces données et la façon la plus propre de réinjecter le résultat dans la chaîne de base.

Dans l'attente de lumineux projecteurs.

Ben

11 réponses

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
6 mai 2008 à 17:03
Mais... Comment dire... c'est juste de l'affichage lol! Met un breakpoint tu verras que tu as bien un flottant 0.9, avec lequel tu peux faire tes opérations...

Apres ton chiffre, ecris le comme tu veux:

A tout hasard: f.ToString(enUS.NumberFormat)
3
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
5 mai 2008 à 23:54
C'est pas plus simple en traitant ca comme de l'xml ?

voilà un début de code d'un vieux bout de code pour te donner une idée :
XmlDocument lXmlDoc = new XmlDocument();
lXmlDoc.Load(lsMonFichierXml);
XmlNodeList lNodeListe = lXmlDoc.DocumentElement.ChildNodes;
foreach (XmlNode lNode in lNodeListe)
{
     string lsValeur = lNode.Attributes["balise"].InnerText;
}
lXmlDoc = null;
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
6 mai 2008 à 00:02
Pour le parse:

CultureInfo enUS = new CultureInfo("en-US");

string s = "0.9";
float f;
f = float.Parse(s, enUS.NumberFormat);

ou son copain float.TryParse, c'est toi qui voit.
0
cs_cordiste Messages postés 6 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 6 mai 2008
6 mai 2008 à 00:17
Bonsoir Oximoron,

J'ai essayé mais la source n'est pas du xml.

Voici un extrait plus complet de ma souce :

0.422356241
0.1234567891000.9
0.325545.112.9
2414400.92335


Les balises a,b,c,d n'étant pas fermées, j'ai opté pour la solution des expressions réguilières pour extraire mes données de la balise b.

Peut être me faut il découvrir une autre approche du problème

Ben
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
6 mai 2008 à 10:57
ok c'est pas du xml ... je serais toi je le ferai par etape effectivment avec des regex :
Tu vire les deux
tu fait un RegEx.Split(lsChaine,"");
tu va récupérer les lignes et après avec un ("([\.,0-9]*") et avec les matches tu récupères toutes valeurs.
Voilà en gros comment je ferai (si c'est pas de l'xml je précise)
0
cs_cordiste Messages postés 6 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 6 mai 2008
6 mai 2008 à 12:23
bonjour

@ buddathemaster : Ta piste est certainement la bonne. Par contre sur mon système le
CultureInfo enUS = new CultureInfo("en-US");

string s = "0.9";

float f;

f = float.Parse(s, enUS.NumberFormat);

me retourne étrangement f = 09

Comment faire pour obtenir 0.9?

Ben
0
cs_cordiste Messages postés 6 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 6 mai 2008
6 mai 2008 à 14:05
@ oximoron Je viens d'essayer ton approche. J'arrive au même résultat... c'est à dire dans une impasse sombre.

Dans mon message précédant j'ai écrits : "buddathemaster : Ta piste est certainement la bonne", je précise que je parlais de la piste qu'il fallait que j'explore. En aucun cas il n'y a de comparaison avec les pistes proposées. A la relecture et comme les messages se sont croisés cela ne me semble un peu confus... c'est regex qui m'embrume."

Vos différentes pistes me font donc progresser... jusqu'à cette impasse : Comment parser ma string pour obtenir le . (point)?

J'ai aussi essayé l'exemple de la page http://msdn.microsoft.com/en-us/library/cafs243z(VS.80).aspx
mais rien à faire, pas de point.
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
6 mai 2008 à 15:40
Honnetement, du parse à partir de nombres US (avec un . en séparateur donc), j'en ai plein à parser dans un de mes programmes, et j'utilise très exactement le parse avec la culture en-US comme je t'ai mis. Je me demande comment tu fais pour récupérer 09 (tu veux dire 9?) et pas 0,9 ????

Peux tu copier coller ton code?
0
cs_cordiste Messages postés 6 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 6 mai 2008
6 mai 2008 à 16:22
Bubbathemaster je suis aussi étonné que toi. Voici le code :

using System;

using System.Globalization;

namespace parseUS

{

    class Program

    {

        static void Main()

        {

            CultureInfo enUS = new CultureInfo("en-US");

            string s = "0.9";

            float f;

            f = float.Parse(s, enUS.NumberFormat);

            Console.WriteLine(f);

            Console.Read();

        }

    }

}

La console m'affiche bien un 09

et non un 0.9 comme espéré

Ben
0
cs_cordiste Messages postés 6 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 6 mai 2008
6 mai 2008 à 18:31
Mais... Comment dire...

Grand débutant

Merci pour ton aide bubbathemaster et merci aussi à Oximoron.

Ben
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
6 mai 2008 à 19:12
oh moi j'ai pas fait grand chose j'ai juste répondu à coté
0
Rejoignez-nous