Evaluation d'expression - fonction eval avec gestion de variables

Soyez le premier à donner votre avis sur cette source.

Vue 10 830 fois - Téléchargée 662 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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
vu sous cet angle...
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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 !
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
quelle formule as tu essayé ?

(je viens d'insérer sans soucis dans un VBA... :/)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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 ;)
Afficher les 18 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.