OVH Cloud OVH Cloud

calcul depuis une chaine ?

4 réponses
Avatar
SG
Bonjour à tous,

je désire obtenir les résultats d'unen formule mathématique simple :

s est une chaine
s = "1 + (4 * 5)"

comme obtenir le résultat ?

iTotal est un entier
iTotal = calcul(s)


existe-t'il un composant ou une fonction pour faire ceci ?


D'avance merci pour votre aide ou tout indice pour résoudre mon petit
problème.

Bonne journée

Jean-Jacques

4 réponses

Avatar
MiF
Bonjour,

comme ceci :
------------
s = "1 + (4 * 5)"
si Compile("calcul", "renvoyer "+s)<>"" alors
info(calcul())
Comple("calcul", "")
fin
------------

Michel Fages
Avatar
MiF
Petite correction (en effet Compile() renvoie "" si le code passé est
OK) :

------------
s = "1 + (4 * 5)"
si Compile("calcul", "renvoyer "+s)="" alors
info(calcul())
Comple("calcul", "")
fin
------------
Avatar
Bugs
"SG" wrote in news:43956c8e$0$3696$:

Bonjour à tous,

je désire obtenir les résultats d'unen formule mathématique simple :

s est une chaine
s = "1 + (4 * 5)"

comme obtenir le résultat ?

iTotal est un entier
iTotal = calcul(s)


existe-t'il un composant ou une fonction pour faire ceci ?


D'avance merci pour votre aide ou tout indice pour résoudre mon petit
problème.

Bonne journée

Jean-Jacques






Un petit indice, pour ce genre de chose, j'utilise la compilation dynamique
C'est pas tres bien documenté, mais ça marche.

Le principe, c'est de créer le source d'une procédure qui fera le calcul a
l'aide de ta chaine de caractère s, puis de la compiler en dynamique, et
enfin de l'executer


procedure calcul(p_eval)

loc_source est une chaine
loc_source="i est un entier"+cr
loc_source="i="+p_eval+cr
loc_source="RENVOYER i"

res=Compile("Proc_calcul",loc_source)

SI res<>"" ALORS
// Erreur de compilation
// Trouver un truc pour interrompre le traitement du programme
RENVOYER Faux
SINON
RENVOYER Proc_calcul
FIN


voila, en gros, a adapter à tes besoins

---------------
Julien (LFMH)
Avatar
SG
super, immense merci à tous pour votre collaboration

voila ce que j'en ai fait :

PROCEDURE Calcul(sEval)

sSource est une chaîne
sSource="i est un entier"+CR
sSource+="i="+sEval+CR
sSource+="RENVOYER i"

sRes est une chaîne
sResultatCompile est une chaîne
sResultatCompile = Compile("Proc_calcul",sSource)

SELON sResultatCompile
CAS "" : sRes = ExécuteTraitement("Proc_calcul", trtProcédure )
CAS "ERR" : sRes = "Compilation impossible. "+ RC +ErreurInfo()
AUTRE CAS : sRes = sResultatCompile
FIN
RENVOYER sRes