none
evaluate RRS feed

  • Question

  • Bonjour à tous

    Soit une variable toto = "13+5"

    Comment affecter à la variable titi, le résultat de toto, soit 18

    Merci de vos réponses

    Cordialement

    Aumeric

     

     

    jeudi 8 juillet 2010 15:51

Réponses

  • Merci à tous

    je suis passé par une commande sql et un executscalar

    et ca fonctionne à merveille.

    Merci de vos réponses très instructives

    Bien cordialemnent

    Aumeric

     

    • Marqué comme réponse aumeric vendredi 9 juillet 2010 13:20
    vendredi 9 juillet 2010 13:20

Toutes les réponses

  • bonjour Aumeric,

    toto = "13+5"
    titi = Evaluate(toto)

    isabelle

    Le 2010-07-08 11:51, aumeric a écrit :

    toto = "13+5"

    jeudi 8 juillet 2010 15:56
  • Bonjour Isabelle

    merci de ta réponse, mais l'intellissence me refuse evaluate

    que faut il   importer comme espace de nom pour qu'il l'accepte ?

    Cordialement

    aumeric

     

    jeudi 8 juillet 2010 16:05
  • bonjour Aumeric,

    essaie avec  Eval

    titi = Eval(toto)
     isabelle

    Le 2010-07-08 12:05, aumeric a écrit :

    Bonjour Isabelle

    merci de ta réponse, mais l'intellissence me refuse evaluate

    que faut il   importer comme espace de nom pour qu'il l'accepte ?

    Cordialement

    aumeric

    jeudi 8 juillet 2010 16:38
  • bonsoir

    eval comme  evaluate n'est pas reconnu par mon visual 

    je suis en vs 2008 sp1

    aumeric

     

    jeudi 8 juillet 2010 18:27
  • si c'est uniquement avec vb6 ce n'est pas possible,  peut être avec une référence "Microsoft Script Control 1.0" MSSCRIPT.OCX
    sinon un exemple ici,  http://www.vbfrance.com/codes/IDE-EVAL-CALCULER-AVEC-TRES-PEU-CODE_43562.aspx

    isabelle
    .

    Le 2010-07-08 14:27, aumeric a écrit :

    bonsoir

    eval comme  evaluate n'est pas reconnu par mon visual

    je suis en vs 2008 sp1

    aumeric

    jeudi 8 juillet 2010 19:05
  • Bonjour,

    Déjà je ne sais pas s'il est au mieux de se retrouver avec une variable qui contient "x + y" en texte, généralement on aura 2 variables numériques et c'st ensuite que l'on mettra le signe entre les deux lors de l'opération.

    En l'espèce :

    Pour le faire en code pur il y a plusieurs façon, par exemple :

     Sub calcul()
     Dim i As Long
     Dim j As Long
     Dim sx As String = ""
     Dim sy As String = ""
     Dim s As String
     Dim x As Long
     Dim y As Long
     Dim z As Long = 0
     Dim valeurStr As String = "13+5"
     j = 1
     For i = 1 To Len(valeurStr)
     If Asc(Mid(valeurStr, i, 1)) > 47 And Asc(Mid(valeurStr, i, 1)) < 57 Then
     If j = 1 Then
      sx = sx & Mid(valeurStr, i, 1)
      Continue For
     End If
     If j = 2 Then
      sy = sy & Mid(valeurStr, i, 1)
      Continue For
     End If
     End If
     j = j + 1
     If j > 2 Then Exit For
     s = Mid(valeurStr, i, 1)
     Next i
     x = CLng(sx)
     y = CLng(sy)
     If s = "+" Then z = x + y
     MsgBox(z)
     '
     'OU -----------
     j = InStr(1, valeurStr, "+", 1)
     x = Val(Mid(valeurStr,1, j - 1))
     s = Mid(j, 1)
     y = Val(Mid(valeurStr, j + 1, Len(valeurStr) - j))
     If s = "+" Then z = x + y
     MsgBox(z)
     End Sub
    

    Cordialement.

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Proposé comme réponse EhJoe vendredi 9 juillet 2010 05:48
    • Modifié EhJoe vendredi 9 juillet 2010 05:49 correction
    vendredi 9 juillet 2010 05:45
  • merci joseph mais c'est ce que je voudrais éviter. J'ai indiqué 13+5 par simplicité mais ca peut être  "13+5+((24*2)/12)+12.56"

    c'est donc bien une évaluation que je cherche.

    J'avais cette commande en foxpro et cela était très pratique. Arrivant dans le monde dotnet, je regresse .

    Merci Isabelle, mais je ne suis pas en VB6 mais en visual studio 2008.

    et je ne trouve pas l'ocx dont tu parles

    je suis en windows seven pro 64 bits

    Cordialement

    Eric

    vendredi 9 juillet 2010 07:33
  • Bonjour Eric,

    Tiens, voici une qustion de ce type, je ne sais pas si elle a trouvé une résolution, ici :

    http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/7652d1a5-8424-4494-933b-2f5ad28e67a2

    http://www.daniweb.com/code/snippet217185.html

    Fait par Gilles Toureau :

    http://gilles.tourreau.fr/wp-content/uploads/2010/05/DotNET-AnalyseurSyntaxique-VB-DotNET.zip

    D'où ma question, car a priori ce n'est guère habituel ni prévu de telle saisies (la preuve), à part si c'est une calculatrice en ligne de commande, que veux-tu faire comme fonctionnalité qui t'oblige à saisir en ligne, car il y a souvent d'autres solutions ?

    Cordialement.

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Proposé comme réponse Alex Petrescu vendredi 9 juillet 2010 11:39
    vendredi 9 juillet 2010 10:16
  • Bonjour,

     

    Comme Joe a indique, vous pouvez utiliser la fonction Evaluate de Microsoft.Office.Interop.Excel:

     

    Ajoutez une référence à votre projet : Microsoft.Office.Interop.Excel.

     

    Dim x as new Microsoft.Office.Interop.Excel.Application()

     

     

     

    Ensuite, utilisez la méthode Evaluate pour retourner un string comme résultat d’une expression interprétée :

     

    x.Evaluate("(1+2*3)/2-1").ToString()

     

     

    Cordialement ,

    Alex

     

    vendredi 9 juillet 2010 11:17
  • bonjour Eric,

    regarde l'article suivant,

    http://msdn.microsoft.com/fr-fr/library/15s06t57(VS.80).aspx

    isabelle
    .
     Le 2010-07-09 03:33, aumeric a écrit :

    merci joseph mais c'est ce que je voudrais éviter. J'ai indiqué 13+5 par simplicité mais ca peut être  "13+5+((24*2)/12)+12.56"

    c'est donc bien une évaluation que je cherche.

    J'avais cette commande en foxpro et cela était très pratique. Arrivant dans le monde dotnet, je regresse .

    Merci Isabelle, mais je ne suis pas en VB6 mais en visual studio 2008.

    et je ne trouve pas l'ocx dont tu parles

    je suis en windows seven pro 64 bits

    Cordialement

    Eric

    vendredi 9 juillet 2010 12:05
  • Bonjour,

    J'ai 2 solution a vous proposez,

    Vous utiliser la compilation dinamique, et dans la compilation vous créé une fonction avec une variable de type

    resultat = 13 + 5

     

    Ou vous utiliser le Sql si vous etes connecter a une base de donnée, un truc dans ce style

    select TOP 1 (13+5) from [la_table]

    vous liser ensuite dans un dataset la premier ligne et premier colonne.

    Cordialement

    Sébastien

    vendredi 9 juillet 2010 13:20
  • Merci à tous

    je suis passé par une commande sql et un executscalar

    et ca fonctionne à merveille.

    Merci de vos réponses très instructives

    Bien cordialemnent

    Aumeric

     

    • Marqué comme réponse aumeric vendredi 9 juillet 2010 13:20
    vendredi 9 juillet 2010 13:20
  • Eric,

    encore plus simple:

    utilise la méthode Compute sur un DataTable. Comme tu as toujours un BO disponible, tu as son CurrentDataTable.

        Dim monResult As Object
        monResult = Me.BoTests.CurrentDataTable.Compute(Me.TextBox1.Text,"")
    
    
    samedi 10 juillet 2010 10:41
  • Bonjour,

    Effectivement, avec la methode de Michel Lévy un simple

     Public Shared Function Evaluate(ByVal pValue As String) As Object
    
          Dim lRetour As Object
    
          Dim l As New DataTable
    
          l.Compute(pValue, "")
    
          Return lRetour
    
        End Function
    

    tu n'es meme pas obliger de créé un dataset type, meme vide et sans ligne la fonction marche

    Cordialement

    Sebastien

    mardi 13 juillet 2010 20:46