IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Evaluation d'une chaîne de caractère


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Par défaut Evaluation d'une chaîne de caractère
    Slt,

    après avoir effectué des recherches sur internet et sur ce forum, je n'ai pas trouvé la réponse à ma question et me tourne vers vous pour m'aider.

    Voilà, j'ai une chaîne de caractère qui ressemble à ça : "CODE = 2", je voudrais savoir comment faire interpréter cette chaîne en VB6???

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    Citation Envoyé par _ChToM_
    je voudrais savoir comment faire interpréter cette chaîne en VB6???
    C'est a dire ??

  3. #3
    Membre confirmé Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Par défaut
    Et bien qu'il me réalise la comparaison "CODE = 2"

    En fait, les informations sont issues d'une base de données. Ca me permet de paramétrer mon test.

  4. #4
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Est ce que tu peux expliquer de manière détaillée ton objectif, le but de cette manipulation ?

    [Edit] : Regarde la fonction Eval()

  5. #5
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    J'ai écrit un composant qui évalue les expressions algébriques contenues dans une chaîne de caractères
    http://www.developpez.net/forums/sho...d.php?t=185576

    Je ne sais pas si ca va resoudre ton probléme, mais c'est sur qu'il ne va pas resoudre "Code = 2". Pare que Code n'est pas connu, par contre avant de soumettre ta chaine au composant, tu peux certainement substituer Code pas sa valeur : auquel cas on aurait quuelque chose comme "2 =2" ou "5 = 2", mon composant retourne dans ce cas Vrai ou Faux.

    Il a surtout été créé pour resouldre des chaîne comme "(5+(2*3)/3) /2"

  6. #6
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Heu, Bujuman. Je ne pense pas que Vb offre de fonction eval(), peux tu m'en dire plus ?

  7. #7
    Membre confirmé Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Par défaut
    Slt tous,

    Voici le but de la manoeuvre :
    J'ai 3 champs dans une table:
    - LIB_CHAMP : mon champ à comparer (ici, CODE)
    - LIB_OPER_COMP : mon opérateur de comparaison (< > = <=...)
    - LIB_VALUE : La valeur que je dois trouver pour rendre ma condition vraie.

    Dans mon traitement VB, j'ai une information CODE (c'est le même nom que celui stocké dans ma base de données).
    Au cours du traitement, je dois vérifier si une condition est vraie. J'utilise mes trois champs pour connaître les valeurs à comparer.

    J'arrive donc dans mon traitement avec ma valeur dans CODE, je regarde ma base de données et je vois que je dois comparer CODE à 2 en vérifiant l'égalité.

    Voilà pourquoi je veux que VB m'évalue la chaîne (formée des 3 champs).


    Si j'ai fait ca, c'est que le champ à comparer n'est toujours le même. Je voudrai rendre mon traitement générique et ainsi modifier la comparaison en touchant à mon champ dans la base de données et non pas dans mon code VB. Et surtout ne pas faire un énorme SELECT - CASE pour traiter mes différents cas!


    J'espère que c'est plus clair maintenant.


    Merci Delbeke pour le lien, je regarde ca tout de suite.

  8. #8
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Citation Envoyé par Delbeke
    Heu, Bujuman. Je ne pense pas que Vb offre de fonction eval(), peux tu m'en dire plus ?
    Je ne l'ai jamais utilisée et ce n'est pas documenté dans la version de mon MSDN. Une petite recherche sur Google serait util.

  9. #9
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Bon, j'ai effectué une recherche sur le net

    Vb n'ofre pas de fonction eval, par contre Eval() est inclus dans Miscrosoft Script Control
    Il suffit de l'ajouter à sa boite à outil, en deposer un sur la feuille
    et voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Command1_Click()
      MsgBox ScriptControl1.Eval("(12.25*2)/3.14")
    End Sub

  10. #10
    Membre confirmé Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Par défaut
    Ca surgere tout ca.

    Pour ceux qui ont le même problème que moi, voilà comment j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Dim maVariable As String
    Dim monChamp As String
    Dim monOperateur As String
    Dim maValeur As String
     
    maVariable = ""
    monChamp = "CODE"
    monOperateur = "="
    maValeur = "2"
     
    maVariable = ScriptControl1.Eval(monChamp & monOperateur & maValeur)
    if maVariable = "Faux" Then
      MsgBox "FAUX"
    Else
      MsgBox "VRAI"
    End if
     
    ...
    Merci pour le coup de main. Bonne prog' à tous!

  11. #11
    Membre confirmé Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Par défaut
    Bon en fait, imaginons maintenant que le nom de la variable qu'il doit interpréter soit stocké dans la base de données.

    Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Dim tmp1 As String
        Dim tmp2 As String
        Dim tmp3 As String
        Dim tmp4 As String
        Dim resultat As String
     
        tmp4 = rs_tmp("LIB_CHAMP") 'Ceci va m'indiquer quelle variable stoke la valeur
        tmp1 = EcrMain.ScriptControl1.Eval(tmp4)  'Ceci est censé me donner la valeur contenue dans la variable, MAIS CA NE MARCHE PAS
        tmp2 = rs_tmp("LIB_COMPARAISON")  'Ceci est mon opérateur de comparaison
        tmp3 = rs_tmp("LIB_VALUE")   'Ceci est la valeur que je dois trouver pour rendre la condition vraie
        resultat = EcrMain.ScriptControl1.Eval(tmp1 & tmp2 & tmp3)
        If resultat = "Vrai" Then
            MsgBox "VRAI"
        End If



    Mon nouveau problème ici, c'est de réussir à évaluer tmp4 pour qu'il me donne la valeur du champ que je dois stocker dans tmp1 pour que je puisse la comparer ensuite.

    Mais mon premier Eval ne marche pas... "Type incompatible"

    Une idée?

  12. #12
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Ou se trouve la valeur de Code ? Dans la base de donnée ou c'est une variable interne du programme ?

  13. #13
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Citation Envoyé par _ChToM_
    Bon en fait, imaginons maintenant que le nom de la variable qu'il doit interpréter soit stocké dans la base de données.
    J'allais te poser la même question, mais je me disais que tu maitrisais la situation mieux que moi.

    Peux-tu donner un exemple de valeur pour LIB_Champs ?

  14. #14
    Membre confirmé Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Par défaut
    La valeur de CODE est stockée dans le programme.

    Moi je stocke juste le NOM de la variable dans la base de données.

    Par exemple, pour LIB_CHAMP, ca pourrait être : "maVariable" ou "CODE" (pour reprendre mon exemple du début)

    et dans le programme VB6, maVariable = "coucou"

    Moi je recupère le nom dans la base de données, je voudrais récupérer sa valeur dans le programme VB6, et l'interpréter ensuite.

  15. #15
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Citation Envoyé par _ChToM_
    Mais mon premier Eval ne marche pas... "Type incompatible"
    tmp4 = rs_tmp("LIB_CHAMP")
    tmp1 = EcrMain.ScriptControl1.Eval(tmp4)
    Pour LIB_CHAPMS = "CODE" on aurra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp1 = EcrMain.ScriptControl1.Eval("CODE")
    Ce qui est normalement incompatible

  16. #16
    Membre confirmé Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Par défaut
    C'est justement ce que je cherche à éviter en essayant de lui faire interpréter CODE!

    Qu'il ne le considére pas comme valeur mais comme nom de variable.

  17. #17
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Il te reste a faire une petite routine qui renvoie la valeur de Code
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function Traduit(Valeur as string) as variant
       Select Case Valeur
       Case "Code"
               Traduit= Code
       Case "Machin"
               Traduit = MaVariable
       Case else
               Traduit=""
      end select
    End function
    Il te faudra prévoir un select pour toutes les valeurs que peut prendre temp1

    Note : une fois compilé, un exe ne connait plus les noms de variable, donc eval ne pouras jamais convertir "Code" en quoi que ce soit

  18. #18
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Je ne vois vraiment pas ce qui peut justifier la présence de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp1 = EcrMain.ScriptControl1.Eval(tmp4)
    Sinon pourquoi ne pas mettre directement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat = EcrMain.ScriptControl1.Eval(tmp4 & tmp2 & tmp3)

  19. #19
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Appliqué a ta problématique ca donnerais quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
        Dim tmp1 As String
        Dim tmp2 As String
        Dim tmp3 As String
     
        Dim resultat As String
     
        tmp1 = traduit(rs_tmp("LIB_CHAMP"))
        tmp2 = rs_tmp("LIB_COMPARAISON")  'Ceci est mon opérateur de comparaison
        tmp3 = rs_tmp("LIB_VALUE")   'Ceci est la valeur que je dois trouver pour rendre la condition vraie
        resultat = EcrMain.ScriptControl1.Eval(tmp1 & tmp2 & tmp3)
       'sur les lignes ci-dessous je ne suis pas sur que la fonction eval renvoie un string 
      'à verifier donc si resultat ne devrais pas etre défini en variant
       ' pour pouvoir faire un If Resultat = True then ...
        If resultat = "Vrai" Then
            MsgBox "VRAI"
        End If

  20. #20
    Membre confirmé Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Par défaut
    Arf, ca m'arrange pas du tout ce que Delbeke m'a dit sur l'exe.

    Ben si ma seule solution est de faire un big Case, tant pis pour le programme générique.

    Merci à tous pour le coup de main.

    Mais si quelqu'un a une autre solution, elle est bienvenue!

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Saisie et affichage d'une chaîne de caractères
    Par sali dans le forum Assembleur
    Réponses: 2
    Dernier message: 31/03/2004, 18h01
  3. [Debutant(e)] Analyse d'une chaîne de caractères
    Par maire106 dans le forum Langage
    Réponses: 6
    Dernier message: 22/03/2004, 15h04
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo