Evaluer une expression

Soyez le premier à donner votre avis sur cette source.

Vue 4 338 fois - Téléchargée 323 fois

Description

Voici ma premiere source sur ce site, en faite cette source va etre utilisée pour un projet dans ma boite (résolution d'arbre décisionnel), et le meilleur moyen de tester un peu la robustesse du code est de la soumettre à un grand nombre de developpeur comme vous.

vous pouvez utiliser tous (enfin presque) les opérateurs de comparaison, logique,... (-,+,-(unaire),+(unaire),*,/,%,<,<=,>,>=,=,<>,AND,OR) de VB

syntaxe :

oObj.Analyze("(10+5)") 'Analyse de la chaine
oObj.Evaluate 'retourne le résultat

Il est possible de crééer des variables :

oObj.Analyze("(var1+10)")
oObj.SetVariable "var1",5
oObj.Evaluate 'retourne 15
oObj.SetVariable "var1",10
oObj.Evaluate 'retourne 20

Cela evite d'avoir à relancer l'analyse syntaxique de la chaine à chaque fois.

Voila, j'attends vos commentaire.

a+.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
6
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2010

salut , avec cette solution , tu peux tomber dans l'erreur suivante :

-------------------------------------------------------

Dim a As integer
a = -1

Expression = "a^2"

Expression2 = Replace(Expression, "a", a)

resultat = Evaluer (Expression2)

-------------------------------------------------------
et que je voie , ça retourne -1 !!!!!
en fait un remplacement ne résoud pas le problème ;
car une fois le a remplacé , il l'interprète commme -1^2 =-(1^2)=-1 et l'erreur !!
une solution est :Expression2 = Replace(Expression, "a", "(" & a & ")").
mais je cherche une source plus performante.
bonne chance
Messages postés
3
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
31 décembre 2004

Salut a tous !

Juste un petit mot pour vous dire que je suis super heureux d'etre tombe sur cet echange de posts. Ca fait presque trois jours que je cherchais desesperement un evaluateur d'expression robuste et fiable... J'ai retourne tout le site VBfrance : analyseurs syntaxique, calculettes, evaluateurs de formules... A peu pres toutes les sources a ce sujet y sont passee, mais impossible de trouver chaussure a mon pied.

J'avais bien vu la solution d'Olilefou en passant par les bases de donnees (http://www.vbfrance.com/code.aspx?ID=2869), mais impossible de la faire fonctionner (impossible de saisir du texte dans les textboxs).

Et voila que je tombe sur ce nouveau post d'Olilefou qui resoud mon probleme en dix lignes... genial ! Derniere frayeur, ne pas pouvoir evaluer des expressions contenant des variables deja declarees.

Exemple, evaluation de Expression :
------------------------------------------------------

Dim a, b As integer
a = 1
b = 2

Expression = "3*a*b"
resultat = Evaluer (Expression)

-------------------------------------------------------

Probleme resolu rapidement avec un Replace :

-------------------------------------------------------

Dim a, b As integer
a = 1
b = 2

Expression = "3*a*b"

Expression2 = Replace(Expression, "a", a)
Expression2 = Replace(Expression, "b", b)
'qui remplace la chaine "3*a*b" en "3*1*2".

resultat = Evaluer (Expression2)

-------------------------------------------------------

Voila. Ca va me servir dans le cadre d'un programme utilisant des algorithmes genetique pour optimiser une structure composite (je suis eleve ingenieur en mecanique, j'etudie le comportement des structures composite dans le cadre d'un stage en labo de recherche). L'utilisateur pourra entrer la fonction qu'il souhaite optimiser en fonction de parametres non constants (d'ou les a, b...).

Voila, je ne suis pas sur que ca interesse grand monde, mais quand je suis content j'aime bien racconter ma vie... Je suppose que vous connaissez tous la sensation d'euphorie lorsque vous trouvez la solution a un probleme (dire que j'ai choisi la meca pour ne pas etre ingenieur informaticieeeeeeeeeeen... ;-) ).

Sinon, je voulais remercier par la meme occasion les admin et autres utilisateurs de ce site. Ca fait quatre mois que je bosse sur ce programme d'optimisation des stratifies composites, j'ai donc pas mal traine sur VBfrance pour chercher des reponses a mes nombreuses questions sur le language Visual Basic. Et j'y ai toujours trouve (plus ou moins facilement) des solutions a mes problemes. Je termine mon stage dans quinze jours (et le prgm par la meme ocassion... ) et je ne pense pas reprogrammer dans un futur proche (je suis mecanicien quand meme ;-) ), donc encore un grand merci a la communaute VBfrance.

Ciao a tous depuis Boulder dans le Colorado (ah oui, j'ai oublie de preciser, je suis aux USA... au pays de Bill et George... ;-( ).

P.S.: je pense a vous sur les pistes de Vail et Aspen ce week end !!!!
Messages postés
291
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
13 mars 2015

Je viens de mettre sur le site un evaluateur assez complet, je pense que ca vous interressera :
Il y a longtemps que je l'avais fais mais ils manquait les commentaires, c'est fait.

http://www.vbfrance.com/code.aspx?ID=27437
Messages postés
29
Date d'inscription
mercredi 1 août 2001
Statut
Membre
Dernière intervention
9 décembre 2005

Silmon> Enfin quelqu'un qui partage ma méthode, c'est ce que j'ai utilisé dans une vieille source (http://www.vbfrance.com/code.aspx?ID=2869), sauf que ma base de donnée est réduite à un fichier texte.
Vive de SQL...
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

Salut,
Voici la methode qu'on utilise dans ma boite
(Ca peut interesser plus d'un):

on execute un select avec le texte de la formule

Par exemple:
"SELECT 5+2*3"

Certains SGBDs comme Sql Server n'ont pas besoin
de la clause FROM.
Pour d'autres comme ACCESS, il faut utiliser le FROM.
Dans ce cas, on peut definir une table contenant une seule ligne avec un seul field du type boolean pour minimizer l'espace
ce qui donne:

"SELECT " & GetFormule & " FROM TABLE_FORMULE;"

si la table a plus d'une ligne, utiliser le TOP 1.

Avantages:
- pas d'api
- methode 100% fiable (jusqu'à preuve du contraire)

Inconvenients:
- on a pas accés au code de conversion
- obligation d'utiliser un SGBD
Afficher les 15 commentaires

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.