Evaluation d'expression - fonction eval avec gestion de variables

4/5 (18 avis)

Vue 11 786 fois - Téléchargée 724 fois

Description

Bonjour à tous,

Je postes ici une source que j'ai développé pour un outil, au boulot. L'outil en question utilisait le contrôle "Microsoft Script Control"
- assignation multiples de variables
- evaluation d'expression logiques/numériques
bref, rien de bien complexe (pas de fonction, etc)

seulement, les multiples appels que je faisaient au controle Script ralentissaient énormément mon application. Je suppose que le controle Script a besoin de s'initialiser, de charger tout un tas de choses diverses et variées à chaque appel : on n'est surement pas supposé faire plein d'appels, mais de grouper ceux-ci...

Bref, j'ai décidé de coder un petit interpreteur de code, pour comparer les performances obtenues.

Succès, mon interpreteur a apporter un gain très sensible de vitesse, et je n'ai eu que très peu a modifier mon outil pour changer d'interpreteur.

je mets ce dernier a disposition aujourd'hui.

ne gère pas les racines, etc.

gère +-/^* And Or & = <> > < les parenthèses, la priorité des opérations, et il est également possible d'utiliser des variables.

Source / Exemple :


Private moScript As CTinyScript

Private Sub CcBtnExecute_Click()
    moScript.Execute CcTxtLive.Text
End Sub

'------------------------------

For i = 0 To moScript.VarCount - 1
    CcLstVars.AddItem moScript.VarName(i) & " = """ & moScript.VarValue(i) & """"
Next i

Conclusion :


quelques fonctions sont dispo
Left/Right/Mid avec un comportement particulier face aux valeurs négatives :
Left("Oscar",-2) => "Osc" (longeur-2)
Right("Oscar",-2) => "car" (longeur-2)
Mid("Australie",-5) => "ralie" (longeur-5)
Mid("Australie",-5,3) => "ral" (longeur-5)

Cos
Sin
Exp
Len
Format
StrReverse
IIf
Date
Now

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
2 août 2007 à 15:16
vu sous cet angle...
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
2 août 2007 à 15:05
Laisse tomber, c'est moi qui suis un abruti... :$
Je pensais pas que c'était toi qui l'avais codé, mais que ça faisait parti du paramètre des 'fonctions vb' !!
Donc testé sans tes classes..

(et ouais, j'ai pas 'tout' lu dans tes classes, t'es trop fort pour moi) ;)
Enfin, puisses-tu me pardonner !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
2 août 2007 à 14:36
Pour info, j'ai mis ca, après avoir ajouté les quatre fichiers .cls dans mon xls :

Public Function DonneResultat() As Variant
Dim oScript As CTinyScript
Set oScript = New CTinyScript
DonneResultat = oScript.Evaluate(InputBox("Formule a calculer : "))
End Function
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
2 août 2007 à 14:33
quelle formule as tu essayé ?

(je viens d'insérer sans soucis dans un VBA... :/)
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
2 août 2007 à 14:28
Salut Rey,

merci pour tes explications (bien que je me doutais du résultat).
Mais rien à faire (et sur un autre pc que le mien), en vba, passe pas !
J'essaierai avec vb6 ;)

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.