Rechercher : dans
Par :

Evaluation d'une expression booléenne contenu

Dernière réponse le 7 mar 2008 à 15:05:14 arthur24, le 7 déc 2007 à 09:38:21 
 Signaler ce message aux modérateurs

Bonjour à tous,

Voici mon problème. Je travaile sous VS2005 et je tente d'évaluer une
condition booléenne contenue dans une variable de type string.

La variable est simplement déclarée par : dim str as string
A l'issu d'un traitement, le contenu de la variable est du type
"((<valeur_booléenne>)AND(<valeur_booléenne>))" et je cherche à évaluer cette
expression pour obtenir la valeur booléenne de l'ensemble de l'expression.


J'ai pensé résoudre le problème par l'appel de Cbool : cBool(str) mais
j'obtiens le message "La conversion de la chaîne "((True)AND(True))" en type
'Boolean' n'est pas valide."

La fonction Cbool n'accepte pas en paramètre de variable de type string.
L'anomalie est la même avec l'appel directe sous la forme
cbool("((True)AND(True))"). Par contre, l'exécution de cbool((True)AND(True))
retourne bien la valeur True.

La fonction Cbool n'est visiblement pas le bon moyen pour évaluer une chaîne
de caractère contenant une expression booléenne. Mais je ne connais pas
d'autre moyen de résoudre ce problème.



Merci par avance de votre aide.

Configuration: Windows XP
Firefox 2.0.0.11

Meilleures réponses pour « Evaluation d'une expression booléenne contenu » dans :
[PHP] Lister le contenu d'un répertoire VoirGrâce à PHP, il est possible d'afficher le contenu d'un répertoire et de ses sous-répertoires. Voici ci-dessous une fonction permettant de parcourir récursivement les répertoires et sous-répertoires et d'en afficher les fichiers : function...
Google - Recherche d'une expression exacte VoirLorsque l’on souhaite faire la recherche d’une expression exacte, il suffit de mettre cette expression entre guillemets. Exemple : "animal domestique" référencera uniquement les sites comportant l’expression "animal domestique".
Que faire face à un contenu illégal (pédophile, raciste, etc) ? VoirLors de vos navigations, vous êtes tombés sur un contenu (vidéo, image) pouvant porter atteinte à la dignité humaine (pédophilie, incitation à la haine raciale, violence, apologie des drogues, etc.) ? L'AFA (Association des fournisseurs d'accès) et...
Webmastering - Contenu rédactionnel VoirImportance du contenu Les visiteurs reviennent généralement sur un site pour son contenu, plus que pour son design. Les études menées sur les internautes montrent que le facteur d'appréciation principal d'un site web est en premier lieu le contenu...

1

phil232, le 7 déc 2007 à 13:55:35

Tu vas devoir parser ta variable parceque c'est vrai une chaine de caractères n'est pas une expression boolean (pour l'homme ça va mais une machine ne sait pas ce que tu veut)

Dim S
Dim B1 as boolean
Dim B2 as boolean
Dim B3 as boolean

S = Split(str, "AND")

If Instr(S(0), "True") > 0 Then B1 = True Else B1 = False
If Instr(S(1), "True") > 0 Then B1 = True Else B1 = False

B3 = B1 AND B2

Répondre à phil232

2

 arthur24, le 7 mar 2008 à 15:05:14

Depuis quelques jours je me disais que des outils externes au code (SQL, Excel,...) devait bien permettre d'évaluer des expressions booléennes. Connaissant mieux SQL, j'ai fait quelques recherches sur le sujet et, ce matin, je suis tombé sur cet article :

http://www.sqlservercentral.com/...

J'ai trouvé dans la procédure stockée décrite les éléments qui me manquaient pour formater correctement une expression analysable, par exemple, par SQL Server.

Le "AND" devient &, le "OR" devient |, etc.
Le "TRUE" devient 1, le "FALSE" devient 0.

Il suffit de reformater l'expression booléenne de départ pour l'exprimer avec les opérateur du SGBD, constituer une requète du style "SELECT " & MonExpressionBool et d'exécuter le tout comme n'importe quelle requète.

Le SGBD retourne le résultat de l'évaluation, sans soucis de profondeur dans le parenthésage, et quelle qu'en soit la structure.

Bien sur, cette solution n'est pas élégante du point de vue algorithmique. Elle déplaira aux fans de la récursion, mais elle a le mérite d'être simple et immédiatement applicable dans une application adossée à une base de données.

Ces quelques jours auront eu le mérite de me replonger dans les joies des fonctions récursives, ça faisait longtemps...

Merci à tous de votre aide.

Répondre à arthur24