cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008
-
29 oct. 2004 à 19:15
nabilham9128113
Messages postés6Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention 5 janvier 2010
-
19 mars 2009 à 22:02
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
-------------------------------------------------------
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
jaco_2004
Messages postés3Date d'inscriptionsamedi 28 août 2004StatutMembreDernière intervention31 décembre 2004 31 déc. 2004 à 08:19
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 :
------------------------------------------------------
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 !!!!
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.
Olilefou
Messages postés29Date d'inscriptionmercredi 1 août 2001StatutMembreDernière intervention 9 décembre 2005 3 nov. 2004 à 00:39
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...
Silmon
Messages postés85Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention 7 mai 2007 2 nov. 2004 à 17:16
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
bidoch78
Messages postés67Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 2 décembre 2005 31 oct. 2004 à 12:54
A noter tout de meme que lorsqu'on a la possibilité d'avoir le code, et de pouvoir le modifier pour aporter des nouveautés, c'est quand meme plus interessant.
J'ai trouvé mon erreur yoman64, en faite j'analyse de gauche à droite l'expression, hors (et j'avais lu ca quelque part en y repensant) il faut analyser de droite à gauche, donc je corrige ca.
Olilefou
Messages postés29Date d'inscriptionmercredi 1 août 2001StatutMembreDernière intervention 9 décembre 2005 31 oct. 2004 à 01:59
La dll pour 'Microsoft Script Control 1.0' est dans tour les windows depuis 98 ou ME.
La dll pour les ADO est dans tous les windows depuis 2000 (je crois), dans tous les Office depuis 97 et téléchargable gratuitement chez Micrsoft.
Et avec 'Assistant Empaquetage & déploiement', on ne se prend pas la tête à installer son appli. sur un poste.
A pars ça j'apprécie les API, mais pas quand c'est beaucoup plus simple sans.
pietrocecchi
Messages postés9Date d'inscriptionsamedi 19 juin 2004StatutMembreDernière intervention 9 mai 2005 30 oct. 2004 à 19:22
Une fois posé, le problème 'expressions' devient très intéressant...
Très bon
bidoch78
Messages postés67Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 2 décembre 2005 30 oct. 2004 à 14:31
J'ai vite regarder l'API EBExecuteLine mais je ne vois pas comment récuperer le résultat.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 30 oct. 2004 à 13:35
pas OK avec cette méthode, car il faut la Dll, et là, on n'est pas sur du tout !
l'API EBExecuteLine est interessante pour evaluer....
Olilefou
Messages postés29Date d'inscriptionmercredi 1 août 2001StatutMembreDernière intervention 9 décembre 2005 30 oct. 2004 à 12:25
J'ai plus court :
Private Sub Form_Load()
' quelques exemples
MsgBox Evaluer("21 / 321 * 3221 - 32 + 343432 / 43243.5454 / 54354 * 345 / (543 - 45 / 43 + 343)")
MsgBox Evaluer("sin(3.14159/4)")
MsgBox Evaluer("now")
MsgBox Evaluer("weekdayname(2, False, vbMonday)")
MsgBox Evaluer("""une longueur : "" & len(""azerty"")")
Unload Me
End Sub
Public Function Evaluer(Exp As String) As String
Dim X As New MSScriptControl.ScriptControl
X.Language = "VBScript"
On Error GoTo E:
Evaluer = X.Eval(Exp)
Exit Function
E:
Evaluer = "Expression invalide."
End Function
Il ne faut pas oublier de référencer 'Microsoft Script Control 1.0'.
Il y a aussi un évaluateur d'expressions dans le gestionnaire de base de données ADO, voici un vieux code à moi qui l'utilise : http://www.vbfrance.com/code.aspx?ID=2869 Cela servait pour les vieux Windows qui n'avait pas le 'Script Control', et ou on pouvait installer les ADO.
bye.
bidoch78
Messages postés67Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 2 décembre 2005 29 oct. 2004 à 23:08
J'ai jeter un coup d'oeil, c'est le week end quand meme (donc la correction peut etre pour demain ou apres demain), je crois avoir trouver le pb. Mais je suis comme toi, et je vais le trouver ton code infaillible.
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 29 oct. 2004 à 23:01
Lol en passnat prend le pas personnel ^^
Ton code fonctionne bien avec les expressions simples ;-)
C juste que moi je cherche un code vraiment infaillible , et j'ai pas vrmt le gout de le coder moi même , donc si ton code est fini , c serais cool :-)
bidoch78
Messages postés67Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 2 décembre 2005 29 oct. 2004 à 20:03
cool, je vais regarder ca
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 29 oct. 2004 à 19:15
J'ai fait une expression avec plin d'opérant ( j'ai fait expiprès lol)
J'obtiens 178.7196... dans vb
et dans ton prog j'ai -748578,032222159
Donc je ne sais pas dou vien l'erreir mais en t-k lol a chaque fois qu'il y a un nv évaluateur d'expression sur le site , je faiut tt le temps ce genre de test ^^
19 mars 2009 à 22:02
-------------------------------------------------------
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
31 déc. 2004 à 08:19
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 !!!!
9 nov. 2004 à 20:37
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
3 nov. 2004 à 00:39
Vive de SQL...
2 nov. 2004 à 17:16
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
31 oct. 2004 à 12:54
J'ai trouvé mon erreur yoman64, en faite j'analyse de gauche à droite l'expression, hors (et j'avais lu ca quelque part en y repensant) il faut analyser de droite à gauche, donc je corrige ca.
31 oct. 2004 à 01:59
La dll pour les ADO est dans tous les windows depuis 2000 (je crois), dans tous les Office depuis 97 et téléchargable gratuitement chez Micrsoft.
Et avec 'Assistant Empaquetage & déploiement', on ne se prend pas la tête à installer son appli. sur un poste.
A pars ça j'apprécie les API, mais pas quand c'est beaucoup plus simple sans.
30 oct. 2004 à 19:22
Très bon
30 oct. 2004 à 14:31
30 oct. 2004 à 13:35
l'API EBExecuteLine est interessante pour evaluer....
30 oct. 2004 à 12:25
Private Sub Form_Load()
' quelques exemples
MsgBox Evaluer("21 / 321 * 3221 - 32 + 343432 / 43243.5454 / 54354 * 345 / (543 - 45 / 43 + 343)")
MsgBox Evaluer("sin(3.14159/4)")
MsgBox Evaluer("now")
MsgBox Evaluer("weekdayname(2, False, vbMonday)")
MsgBox Evaluer("""une longueur : "" & len(""azerty"")")
Unload Me
End Sub
Public Function Evaluer(Exp As String) As String
Dim X As New MSScriptControl.ScriptControl
X.Language = "VBScript"
On Error GoTo E:
Evaluer = X.Eval(Exp)
Exit Function
E:
Evaluer = "Expression invalide."
End Function
Il ne faut pas oublier de référencer 'Microsoft Script Control 1.0'.
Il y a aussi un évaluateur d'expressions dans le gestionnaire de base de données ADO, voici un vieux code à moi qui l'utilise : http://www.vbfrance.com/code.aspx?ID=2869
Cela servait pour les vieux Windows qui n'avait pas le 'Script Control', et ou on pouvait installer les ADO.
bye.
29 oct. 2004 à 23:08
29 oct. 2004 à 23:01
Ton code fonctionne bien avec les expressions simples ;-)
C juste que moi je cherche un code vraiment infaillible , et j'ai pas vrmt le gout de le coder moi même , donc si ton code est fini , c serais cool :-)
29 oct. 2004 à 20:03
29 oct. 2004 à 19:15
Avec 21 / 321 * 3221 - 32 + 343432 / 43243.5454 / 54354 * 345 / (543 - 45 / 43 + 343)
J'obtiens 178.7196... dans vb
et dans ton prog j'ai -748578,032222159
Donc je ne sais pas dou vien l'erreir mais en t-k lol a chaque fois qu'il y a un nv évaluateur d'expression sur le site , je faiut tt le temps ce genre de test ^^
YoMan64
PhPKoDe.Com