IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Commandes enregistreées dans un XML


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Commandes enregistreées dans un XML
    Bonjour à tous,


    J'aimerais savoir si il est possible ( et si oui, comment ^^) de sauvegarder des commandes ( comme Math.Round et autre) dans une balise XML afin que c# puisse les interprétés plus tard...

    En clair ^^:

    Fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <calcul>
    <operation>2+52+8</operation
    </calcul>
    et que cela donne , une fois le xml chargé dans c#


    Merci d'avance

  2. #2
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,
    Non, rien de directe, c'est à toi d'écrire ton interpréteur.

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Pour ce genre de détail, j'avais donné un exemple (il y a longtemps - au moins deux ans) d'utilisation du CodeDom et de la compilation à la volée.

    Une petite recherche devrait le faire ressortir.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Merci pour vos réponses =) ...

    Je vais faire une recherche pour la compilation à la volée ...

    Ce n'est pas possible avec XML , mais est ce que ce ne serait pas possible avec un autre type de fichier?

  5. #5
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Bah comme Bluedeep l'a suggéré, tu peux générer un code en C# ou en VB.Net (donc un .cs ou un .vb) et au runtime tu le compile puis l'exécute.
    Mais attention, songes bien aux implications, cette façon de faire peut devenir très dangereuse puisque le fichier en question contient du code et donc l'utilisateur peut exécuter ce qu'il veux.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    J'ai retrouvé ton Post BlueDeep et c'est sur , c'est ce qu'il me faut ...

    Je donne le lien pour les personnes qui voudraient savoir de quoi il retourne :

    http://www.developpez.net/forums/d47...ion-dynamique/


    Ta classe est parfaite, elle réalise bien les formules... Juste un point, est il possible qu'elle n'arrondisse pas trop les divisions a l'intérieur de la formule :

    Par exemple 100/30 donne 3 , est il possible d'avoir 3.33 (ou plus)..

    J'avoue que c'est être 'chiant' mais c'est pour le domaine médicale alors

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Bon, déjà, je suis content qu'un truc que j'ai "torché" vite fait à titre de démo puisse servir à quelqu'un.

    Pour tes arrondis, il faut garder en tête que ma classe, et bien, elle compile du C#.
    Donc quand tu écrits 10 /3 en C#, par défaut c'est une division entre deux entiers.
    Maintenant, comme précisé, cette classe n'est qu'un démonstrateur, donc je t'invite à modifier le parseur pour la faire travailler par défaut avec des double ou des decimal.
    Typiquement, introduire un cast systématique des données en decimal.
    pas trop le temps de faire la modif là, mais si je trouve une demi-heure à perdre (pas aujourd'hui !!) , je vais essayer. Mais tu dois pouvoir le faire sans trop de problème.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Merci beaucoup pour ton aide...


    Ca m'aide beaucoup pour mon projet ^^

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    (Pardon pour le double Post)

    Bonjour,

    J'ai essayé de modifier la classe qu'a fait DeepBlue et surtout (selon moi c'est la zone qu'il faut modifier) celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            public double Compute()
            {
                double formulaResult = double.NaN;
                string parsedFormula = ParseForSymbolClasses(_formula);
                CodeCompileUnit unit = prepareCompileUnit(parsedFormula);
                Assembly dynamicAssembly = compileCode(unit, _language);
                if (dynamicAssembly != null)
                {
                    object formulaComputer = dynamicAssembly.CreateInstance(_nameSpace + "." + _className, true);
                    MethodInfo computeFormula = formulaComputer.GetType().GetMethod(_methodName);
                    formulaResult = (double)computeFormula.Invoke(formulaComputer, null);
                }
                return formulaResult;
            }
     
            private string ParseForSymbolClasses(string formula)
            {
                string parsedFormula = formula;
                foreach (Type symbolClass in _classToParse)
                {
                    parsedFormula = parseAndReplaceForSymbols(symbolClass, parsedFormula);
                }
                return parsedFormula;
            }
    Mais je ne trouve pas de zone à modifier afin de faire l'opération avec des doubles plutôt que des int ...

    Pouvez vous m'aider?

    Romain

  10. #10
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Hum...
    je ne comprend pas ta demande, son code travail déjà avec des doubles, ce qui est plus que logique pour une classe de calcule.
    Tu voulais peut être dire l'inverse : obtenir un int plutôt qu'un double ?
    Qu'est-ce qui t'empêche de faire la conversion du résultat ?
    Ca me paraît mieux de faire les opérations en double puis de convertir en int à postériori dans le sens où pendant l'opération la partie décimale sera prise en compte.
    Je veux dire, si tu fais : (5 / 2) * 3, en int ca donne 2 * 3 = 6
    Alors qu'en double ca donne 2.5 * 3 = 7.5, ce qui, une fois converti en int, te donnera 7.
    Comme tu le vois, il y a un bel écart et le second résultat est plus proche du résultat réel de l'opération. C'était pourtant un calcul simpliste. Alors imagine le décalage que tu risque d'avoir sur des calculs plus complexes.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Et bien non c'est bien un double qu'il faut que je modifie, ou au moins le nombre de chiffre significatif utilisé dans la classe... Je m'explique :


    Lorsque je fais le calcul 10*(100/30), ça me donne un résultat de 30 ( elle arrondi tout)... Le résultat que je souhaiterais obtenir est bien sur 33 voir 33,33...


    En précisant bien que la valeur 30 est variable à chaque exécution ( je ne peux pas écrire 10*3.3333


    Est ce possible?

  12. #12
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Je n'ai pas tenté d'exécuter la classe donc je me trompe peut être, mais je n'ai rien vu dans le code qui arrondissait ou qui travaillait avec autre chose que des doubles.
    Ne serait-ce pas plutôt toi qui ne t'en sert pas correctement ?
    Je veux dire, comme l'a indiqué son auteur, cette classe transforme l'expression passée en code C#, intègre le tout dans une méthode qu'elle compile à la volée en mémoire puis l'exécute.
    Autrement dit, ton expression doit être valide en C#. C'est à dire qu'il faut mettre les préfixes/suffixes à tes nombres pour qu'ils soient typés correctement.

    Exemple :
    10 => int
    10.0f => float
    10.0d => double
    10.0m => decimal
    etc..

    Si tu ne le fais pas ca donne :
    (double)((int)10 * (int)((int)100/(int)30))
    Ton résultat est bien typé double mais l'opération s'est faite sur des int.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Miracle , Oh miracle...C'est une merveille cette classe


    Merci beaucoup pour ton aide ctxnop .. C'est parfait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/10/2011, 11h26
  2. [TestNG] Lancer commande MS-DOS (ou script) dans fichier XML
    Par Lionkid dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 18/05/2010, 21h48
  3. Commandes MySQL dans un fichier xml.
    Par argon dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 12/06/2009, 09h56
  4. Pas de casse dans les XML
    Par :GREG: dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo