Regex et Parse [Résolu]

Signaler
Messages postés
6
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
6 mai 2008
-
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009
-
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

Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
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)
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

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;
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
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.
Messages postés
6
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
6 mai 2008

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
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

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)
Messages postés
6
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
6 mai 2008

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
Messages postés
6
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
6 mai 2008

@ 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.
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
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?
Messages postés
6
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
6 mai 2008

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
Messages postés
6
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
6 mai 2008

Mais... Comment dire...

Grand débutant

Merci pour ton aide bubbathemaster et merci aussi à Oximoron.

Ben
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

oh moi j'ai pas fait grand chose j'ai juste répondu à coté