Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EVALUATION D'EXPRESSION - FONCTION EVAL AVEC GESTION DE VARIABLES


Information sur la source

Catégorie :Exécution Classé sous : eval, evaluate, code, executer, variable Niveau : Débutant Date de création : 25/07/2007 Date de mise à jour : 31/07/2007 16:21:36 Vu / téléchargé: 6 158 / 382

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
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, sin, cos, etc

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

Source

  • 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
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)

Len
Format
StrReverse
IIf
Date
Now
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

26 juillet 2007 15:13:50 :
Gestion du - unaire, des suites 1--2, et ajoutde quelques fonctions (Left, Right, etc)
31 juillet 2007 16:21:36 :
Déclaration de variables manquantes. Ajout d'un On Error

Commentaires et avis

signaler à un administrateur
Commentaire de EBArtSoft le 25/07/2007 22:26:12 administrateur CS

Que dire... toujours aussi bien organisé ;-p

signaler à un administrateur
Commentaire de Renfield le 26/07/2007 15:15:43 administrateur CS

Quelques fonctions supplémentaires sont gérées.

toujours aussi peu de commentaire dans le code...

signaler à un administrateur
Commentaire de mortalino le 26/07/2007 16:14:30

dans ta classe CParser, mztool me dit que oMemLexer & sOperation dans AddParent ne sont pas utilisés  :$

Sinon, bah moi je suis obligé de virer l'Option Explicit car VB me donne un Msg d'erreur : Variable non définie, sur :

sBuffer =
(ligne 386, classe CParser)
Bizarre, d'autant plus que cette variable est bien déclarée !!
Mais je pense que mon VB souffre un peu en ce moment depuis que je l'ai subclassé, je le réinstallerai à l'occas

Sinon, bah c'est sympa, et comme d'hab, très bien codé  ;)
++

signaler à un administrateur
Commentaire de Renfield le 26/07/2007 21:08:26 administrateur CS

ok pour ces variables, je ferai le ménage.

j'ai testé pas mal de cas, ca fonctionne pas trop mal... j'ajouterai peut etre la possibilité de créer des fonctions perso.

signaler à un administrateur
Commentaire de shadowmoy le 30/07/2007 21:03:41

decares manquant pour le pb de Mortalino :

Dim sValue1 As Variant
Dim sbuffer As String
Dim sVarName As String

a ajouter dans la fonction Evaluate de la classe cparser

sinon c cool :)

signaler à un administrateur
Commentaire de Renfield le 31/07/2007 06:52:00 administrateur CS

étrange qu'ils manquent, sont passés sous la vigilance de l'Option Explicit ?

(et me semblait qu'ils y étaient, surtout :/)

signaler à un administrateur
Commentaire de nico1610 le 31/07/2007 11:52:06

Super code, comme d'habitude, une facon de coder la chose.

Juste une question je comprend pas ca :
Le faite d'utilisé des [] dans tes Enum, c'est juste pour que VB accepte les espaces dans les variables ?
Sinon le Left("Osacr", -2) c'est bien trouvé, on croirai avoir du php avec un SubStr() ^^

signaler à un administrateur
Commentaire de Renfield le 31/07/2007 15:00:11 administrateur CS

content que le code t'interesse, et que tu te soit donné la peine d'y jet un oeil.

oui, les [] dans les enumes, c'est pour pouvoir mettre des espaces et autres caractères.

Pour la valeur négative dans le Left, Right et Mid, c'est un truc que j'ai vu en Python, et que je trouve pratique

signaler à un administrateur
Commentaire de mortalino le 31/07/2007 15:08:53

Salut Rey,

ça fait quoi une valeur négative dans ces fonctions ?
viens de tester (avec vba d'excel, pas vb6 sur ce pc), bah j'ai une erreur  :(
merci  ;)
++

signaler à un administrateur
Commentaire de Renfield le 31/07/2007 16:16:16 administrateur CS

une erreur ???
étrange :/ surement une valeur en dehors de la range autorisée... vais mettre un On Error au cas où

Pour le négatif, en fait, ca part de la fin :

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)

signaler à un administrateur
Commentaire de Renfield le 31/07/2007 16:22:26 administrateur CS

voilà, j'ai patché en ajoutant des On Error au niveau des appels a ces fonctions de chaine

signaler à un administrateur
Commentaire de Renfield le 31/07/2007 16:25:23 administrateur CS

si le besoin d'autres fonctions se fait sentir....

(prochainement, j'ajouterai la gestion de tableaux)

signaler à un administrateur
Commentaire de nico1610 le 31/07/2007 20:39:59

Il est vrai que python fait la chose, mais a l'origine c'est quand même une idée php assez pratique, j'avais même l'intention un moment de refaire les fonctions de gestion des chaines de caractère Php en VB car elle sont vraiment sympa à utiliser !

Pour le SubStr php : http://fr.php.net/manual/fr/function.substr.php
Sur le panneau de gauche tu as les autres fonctions de traitement des chaines de caractère, en fouillant dedans on trouve des perles !

signaler à un administrateur
Commentaire de mortalino le 02/08/2007 14:28:33

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   ;)

signaler à un administrateur
Commentaire de Renfield le 02/08/2007 14:33:31 administrateur CS

quelle formule as tu essayé ?

(je viens d'insérer sans soucis dans un VBA... :/)

signaler à un administrateur
Commentaire de Renfield le 02/08/2007 14:36:43 administrateur CS

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

signaler à un administrateur
Commentaire de mortalino le 02/08/2007 15:05:33

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 !

signaler à un administrateur
Commentaire de Renfield le 02/08/2007 15:16:09 administrateur CS

vu sous cet angle...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Variable pour plusieurs feuilles [ par Brodeur ] Bonjour, je voudrais savoir comment faire pour qu'une variable definie dans une feuille soit utilise par une autre feuille (ce serai comme si on faisa Requete dans variable string a executer... [ par Baronoirzereal ] Quelqu'un connait la commande qui permet d'executer une requete (contenue dans une variable string) dans une base sqlserver afin d'afficher le resulta retouner des valeurs de variable d'un .bat a un code vb [ par nicobele ] bonjour,Comment peut-on faire pour a partir d'un code vb appeler un .bat et faire en sorte de retourner une valeur de variable du .bat au code vb?merc Rechercher les zones du code ou une variable est utilisée... [ par sharky ] Tout est dans le titre:Je voudrais rechercher toutes les lignes de mon code ou j'utilise une variable déclarée dans un module.basVb6 permet-il de fair Pb d'envoie de variable avec winsock [ par terminatorturbo ] Salut tous le monde voila mon problème :je voudrais envoie une variable par winsock, mon serveur fonctionne car quand je veux ouvrir un site défini sa Enum [ par Net1dsang ] voila je cherche a savoir si une variable prend bien une valeur d'un enum. Je m'explique, j'ai le code suivant :Public enum code code1=1 code2=2 Problème de variable [ par eXplaiNeD ] Hello tout le monde,J'ai besoin de votre grande aide et de votre grande humanité.Je devellope actuellement un petit jeux fun, mais je m'heurte à un pr If Form = Nothing Then, ca marche pas !!! [ par phtribaudeau ] Bonjour, voici une question technique : Je déclare une variable suivante : Dim F As FormEt je souhaite savoir plus loin dans mon code si cette va Initiliser un tableau [ par Freztagada ] Salut,Je n'arrive pas a trouver mon bonheur dans l'aide de VBExcel alors je m'adresse aux specialiste.Je voudrais savoir comment peut-on reinitialiser Open text.text As Binary .... [ par BadNews ] Allo J'aimerais savoir comment on fait pour lire un fichier en code binaire pour ensuite l'envoyer via winsock. Bien sur , j'aimerais savoir commen


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.