Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calcul AND er OR

12 réponses
Avatar
Marc
Bonjour à tous,

suite de mes problèmes.

Je récupère un Chaîne de caractères dans une variable exemple: "(1 AND 1) OR
1"

Comment la calculer pour obtenir le résultat = 1 dans le code ?

Ca me rappel les table de vérité avec les portes en électronique.

Par avance merci

Marc

10 réponses

1 2
Avatar
LE TROLL
Bonjour,

Tu parles du décalage des bits dans un octet là, ou d'un valeur de
variable ?

Puis tu dis : "Comment la calculer pour obtenir le résultat = 1 dans le
code ?"

Mais dans le code tu ne peux rien obtenir, à moins de générer du code
dans une autre fichier à partir de ton programme, en effet, c'est dans des
variables ou fichiers que le résultat va s'afficher, pas dans le code ?

Et "1" c'est quoi ?
Car une variable ne peux pas commencer par un chiffre (v1), et "1" est censé
contenir quoi pour l'exemple ?

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Marc" a écrit dans le message de
news:

Bonjour à tous,

suite de mes problèmes.

Je récupère un Chaîne de caractères dans une variable exemple: "(1 AND 1)
OR 1"

Comment la calculer pour obtenir le résultat = 1 dans le code ?

Ca me rappel les table de vérité avec les portes en électronique.

Par avance merci

Marc



Avatar
Vincent Guichard
Marc a écrit :
Bonjour à tous,

suite de mes problèmes.

Je récupère un Chaîne de caractères dans une variable exemple: "(1 AND 1) OR
1"

Comment la calculer pour obtenir le résultat = 1 dans le code ?

Ca me rappel les table de vérité avec les portes en électronique.

Par avance merci

Marc



Bonjour,

La fonction Eval() n'existe pas (plus?) dans VB6. Cependant, elle existe
(encore?) dans VBScript, donc on peut l'invoquer en utilisant la
référence "Microsoft Script Control 1.0":

Dim sc As New ScriptControl
Private Sub Form_Load()
sc.Language = "VBScript"
Debug.Print sc.Eval("1+2")
End Sub

Vincent Guichard

PS: elle existe aussi dans (certaines?) versions de VBA (comme celui
d'Access).
Avatar
Jean-marc
Marc wrote:
Bonjour à tous,

suite de mes problèmes.

Je récupère un Chaîne de caractères dans une variable exemple: "(1
AND 1) OR 1"



Il serait intéressant de savoir d'ou vient cette chaine de caractère.
Est ce toi qui la construit ?

Comment la calculer pour obtenir le résultat = 1 dans le code ?



La chaine a-t-elle toujours cette forme :
"(a AND b) OR c" (avec a et b variables, valant 0 ou 1)

Ca me rappel les table de vérité avec les portes en électronique.



De fait, c'est la même chose.




De la réponse aux questions ci-dessus dépendra la réponse ...

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Marc
Merci le Troll de ton intervention,

les 1 sont des réultats binaire de condition:

Je m'explique

Je suis en train de recréer des fichier sequentil indexe et je fait csuis en
train de creer un systeme de requete:

Voici une requete type: SELECT * FROM VILLE WHERE (CPu000 AND VILLE
=PARIS) OR VALIDER=1 etc .. etc ...

1) Je cherche sur mon fichier un enregistrement ou il y aura CPu000,
VILLE=PARIS, VALIDER=1

2) J'affecte le resultat 1 a chaque condition correct là on 1 partout
si CPu000, VILLE=PARIS, VALIDER=1 donne "1 1 1"
si CPu010, VILLE=PARIS, VALIDER=0 donne "0 1 0"

A partir de resultat j'utilise les table de verite comme pour les portes en
éléctronique, je traduis:
Pour info si tu ne connais pas:
0 AND 0 = 0 0 OR 0 = 0
1 AND 0 = 0 0 OR 1 = 1
0 AND 1 = 0 1 OR 1 = 1
1 AND 1 = 1 1 OR 1 = 1

Var= "(1 AND 1) OR 1"

Voici le calcul fait à la main, à faire faire au processeur: (1 AND 1) =
(1) -> (1) OR 1 = 1 -> donc Var = 1

Le 1 qui est dans Var valide ou non la selection de l'enregistrement pour le
renvoyer au client.

Le problème est: comment rendre la chaîne calculable, cela reviens presque à
une chaine de caracrtères sous excel à calculer mais avec AND et OR.

Je ne suis pas sur d'être clair, enfin j'ai essayé.

Marc


Bonjour,

Tu parles du décalage des bits dans un octet là, ou d'un valeur de
variable ?

Puis tu dis : "Comment la calculer pour obtenir le résultat = 1 dans le
code ?"

Mais dans le code tu ne peux rien obtenir, à moins de générer du code
dans une autre fichier à partir de ton programme, en effet, c'est dans des
variables ou fichiers que le résultat va s'afficher, pas dans le code ?

Et "1" c'est quoi ?
Car une variable ne peux pas commencer par un chiffre (v1), et "1" est
censé contenir quoi pour l'exemple ?

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Marc" a écrit dans le message de
news:

Bonjour à tous,

suite de mes problèmes.

Je récupère un Chaîne de caractères dans une variable exemple: "(1 AND 1)
OR 1"

Comment la calculer pour obtenir le résultat = 1 dans le code ?

Ca me rappel les table de vérité avec les portes en électronique.

Par avance merci

Marc






Avatar
Marc
Merci Jean-Marc,

Oui c'est moi qui construit la chaîne, tu peux voir plus haut, j'ai répondu
au Troll, pour expliquer la suite de mon travail
sur ISAM


Marc wrote:
Bonjour à tous,

suite de mes problèmes.

Je récupère un Chaîne de caractères dans une variable exemple: "(1
AND 1) OR 1"



Il serait intéressant de savoir d'ou vient cette chaine de caractère.
Est ce toi qui la construit ?

Comment la calculer pour obtenir le résultat = 1 dans le code ?



La chaine a-t-elle toujours cette forme :
"(a AND b) OR c" (avec a et b variables, valant 0 ou 1)

Ca me rappel les table de vérité avec les portes en électronique.



De fait, c'est la même chose.




De la réponse aux questions ci-dessus dépendra la réponse ...

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Marc
Merci Vincent,

Ca marche impeccable

Je vais travailler de cette façon.

Je suis proche de la fin de ce projet.

Après j'ai tout un programme qui fonctionne aujourd'hui avec MYSQL et il
faut que je le passe sous mes fichiers indexé.

Le programme a nécessité presque 5 ans de développement, rien que de penser
à la suite, pfffffffff !

Merci encore

Marc a écrit :
Bonjour à tous,

suite de mes problèmes.

Je récupère un Chaîne de caractères dans une variable exemple: "(1 AND 1)
OR 1"

Comment la calculer pour obtenir le résultat = 1 dans le code ?

Ca me rappel les table de vérité avec les portes en électronique.

Par avance merci

Marc



Bonjour,

La fonction Eval() n'existe pas (plus?) dans VB6. Cependant, elle existe
(encore?) dans VBScript, donc on peut l'invoquer en utilisant la
référence "Microsoft Script Control 1.0":

Dim sc As New ScriptControl
Private Sub Form_Load()
sc.Language = "VBScript"
Debug.Print sc.Eval("1+2")
End Sub

Vincent Guichard

PS: elle existe aussi dans (certaines?) versions de VBA (comme celui
d'Access).
Avatar
at
Marc vient de nous annoncer :
Merci le Troll de ton intervention,

les 1 sont des réultats binaire de condition:

Je m'explique

Je suis en train de recréer des fichier sequentil indexe et je fait csuis en
train de creer un systeme de requete:

Voici une requete type: SELECT * FROM VILLE WHERE (CPu000 AND VILLE =PARIS)
OR VALIDER=1 etc .. etc ...

1) Je cherche sur mon fichier un enregistrement ou il y aura CPu000,
VILLE=PARIS, VALIDER=1

2) J'affecte le resultat 1 a chaque condition correct là on 1 partout
si CPu000, VILLE=PARIS, VALIDER=1 donne "1 1 1"
si CPu010, VILLE=PARIS, VALIDER=0 donne "0 1 0"

A partir de resultat j'utilise les table de verite comme pour les portes en
éléctronique, je traduis:
Pour info si tu ne connais pas:
0 AND 0 = 0 0 OR 0 = 0
1 AND 0 = 0 0 OR 1 = 1
0 AND 1 = 0 1 OR 1 = 1
1 AND 1 = 1 1 OR 1 = 1

Var= "(1 AND 1) OR 1"

Voici le calcul fait à la main, à faire faire au processeur: (1 AND 1) = (1)
-> (1) OR 1 = 1 -> donc Var = 1

Le 1 qui est dans Var valide ou non la selection de l'enregistrement pour le
renvoyer au client.

Le problème est: comment rendre la chaîne calculable, cela reviens presque à
une chaine de caracrtères sous excel à calculer mais avec AND et OR.

Je ne suis pas sur d'être clair, enfin j'ai essayé.

Marc




Déjà AND et OR sont des mots clefs reconnus dans VB6 et répondent à ta
table de vérité (algèbre de Boole non ?).

Moi, je split ta chaine "1 1 1"

dim sp as variant
result ="0 1 1"
sp = split(result," ")

MsgBox Int(sp(0)) And Int(sp(1)) Or Int(sp(2))
Avatar
LE TROLL
Bonsoir Marc,

Je crois que tu as déjà quelque chose qui te satisfait dans les
réponses, toutefois, et si je comprends tout, s'il faut dans une question,
qui fait suite à une recherche et qui donne "1" dans une variable si vrai,
surtout s'il n'y en a que trois, on peut prendre une variable classique et
tester diectement (principe) :

dim r1, r2, r3, r, b
r1=recherche1
r2=recherche2
r3=recherche3
r = r1 & r2 & r3
búlse ' 0
if r = "111" then n=true ' 1

Reste à savoir s'il manque une condition, si ça a une importance autre
que le rejet

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Marc" a écrit dans le message de
news:%
Merci le Troll de ton intervention,

les 1 sont des réultats binaire de condition:

Je m'explique

Je suis en train de recréer des fichier sequentil indexe et je fait csuis
en train de creer un systeme de requete:

Voici une requete type: SELECT * FROM VILLE WHERE (CPu000 AND VILLE
=PARIS) OR VALIDER=1 etc .. etc ...

1) Je cherche sur mon fichier un enregistrement ou il y aura CPu000,
VILLE=PARIS, VALIDER=1

2) J'affecte le resultat 1 a chaque condition correct là on 1 partout
si CPu000, VILLE=PARIS, VALIDER=1 donne "1 1 1"
si CPu010, VILLE=PARIS, VALIDER=0 donne "0 1 0"

A partir de resultat j'utilise les table de verite comme pour les portes
en éléctronique, je traduis:
Pour info si tu ne connais pas:
0 AND 0 = 0 0 OR 0 = 0
1 AND 0 = 0 0 OR 1 = 1
0 AND 1 = 0 1 OR 1 = 1
1 AND 1 = 1 1 OR 1 = 1

Var= "(1 AND 1) OR 1"

Voici le calcul fait à la main, à faire faire au processeur: (1 AND 1) =
(1) -> (1) OR 1 = 1 -> donc Var = 1

Le 1 qui est dans Var valide ou non la selection de l'enregistrement pour
le renvoyer au client.

Le problème est: comment rendre la chaîne calculable, cela reviens presque
à une chaine de caracrtères sous excel à calculer mais avec AND et OR.

Je ne suis pas sur d'être clair, enfin j'ai essayé.

Marc


Bonjour,

Tu parles du décalage des bits dans un octet là, ou d'un valeur de
variable ?

Puis tu dis : "Comment la calculer pour obtenir le résultat = 1 dans
le code ?"

Mais dans le code tu ne peux rien obtenir, à moins de générer du code
dans une autre fichier à partir de ton programme, en effet, c'est dans
des variables ou fichiers que le résultat va s'afficher, pas dans le code
?

Et "1" c'est quoi ?
Car une variable ne peux pas commencer par un chiffre (v1), et "1" est
censé contenir quoi pour l'exemple ?

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Marc" a écrit dans le message de
news:

Bonjour à tous,

suite de mes problèmes.

Je récupère un Chaîne de caractères dans une variable exemple: "(1 AND
1) OR 1"

Comment la calculer pour obtenir le résultat = 1 dans le code ?

Ca me rappel les table de vérité avec les portes en électronique.

Par avance merci

Marc










Avatar
Jean-marc
Marc wrote:
Merci Jean-Marc,

Oui c'est moi qui construit la chaîne, tu peux voir plus haut, j'ai



Si tu as les valeurs, alors c'est absurde de construire la chaine
de caractères avec les AND et les OR, en tout cas inutile.

[ca n'enlève rien en soi à la méthode indiquée par Vincent, qui
s'applique sans problèmes pour d'autres cas.]

La solution donnée par at est déjà bien meilleure dans le principe.

Tu peux écrire une fonction qui prend en argument une chaine de la forme
"a b c" et qui retourne True ou False selon la formule :

r = (a AND b) OR c

Public Function MyEval(ByVal s As String) As Boolean
Dim t() As String

t = Split(s, " ")

MyEval = (CBool(t(0)) And CBool(t(1))) Or CBool(t(2))

End Function

Et pour l'utilisation :

Private Sub Form_Load()
Dim s As String
Dim r As Boolean

' Exemple
s = "1 0 1"
r = MyEval(s)
MsgBox "résultat de eval de " & s & " = " & r
End Sub

Remarque : il serait de toute façon beaucoup plus malin de
traiter le problème à la source, au moment ou tu disposes
de a, b et c.

Il suffit de remarquer que :

SI c = "1" alors
L'expression est VRAI de toute façon (1)
SINON
SI a="0" ou b="0" alors
L'expression est FAUX (0)
SINON
L'expression est VRAI (1)
FIN SI
FIN SI

ce qui donnerait :
Public Function MyEval2(ByVal a As Integer, _
ByVal b As Integer, _
ByVal c As Integer) As Boolean

If c Then
MyEval2 = True
Else
If (Not a) Or (Not b) Then
MyEval2 = False
Else
MyEval2 = True
End If
End Function

Ultime remarque : As tu lu ce qui se fait en général pour
l'implémentation des fichiers séquentiels indexés ?
Si non, tu devrais jeter un oeil, c'est plein de choses intéressantes.
Tu verrais notamment qu'on utilise des méthodes très différentes
de celles-ci pour l'accès aux enregistrements. La méthode que tu veux
employer ici est ok pour une base contenant quelques centaines
d'enregistrements, mais au dela, les performances vont être navrantes.
Si pour ton appli les perfs ne sont pas un problème [ou si les
bases ont très peu d'enregistrements], alors tout roule.

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Marc
Merci Jean-Marc pour ton Exemple.
En revanche, les fichier que je traite ne sont normalement pas superieur à
2000 ou 3000 lignes.

Sauf un ou deux et là effectivement il faut 5 à 6 seconde pour traiter 40
000 enregistrements.

Ultime remarque : As tu lu ce qui se fait en général pour
l'implémentation des fichiers séquentiels indexés ?
Si non, tu devrais jeter un oeil, c'est plein de choses intéressantes.
Tu verrais notamment qu'on utilise des méthodes très différentes



J'ai fais des recherches sur isam je tombe sur les arbre btree et je dois
admetre qu'apres plusieur exemples je ne comprends pas vraiment le
fonctionnement.

Tu parlais peut être d'autres choses pour les fichiers séquentiels indéxées
?

Cordialment.

Marc


- www.gelase.org
"Jean-marc" a écrit dans le message de news:
4af9aeed$0$2854$
Marc wrote:
Merci Jean-Marc,

Oui c'est moi qui construit la chaîne, tu peux voir plus haut, j'ai



Si tu as les valeurs, alors c'est absurde de construire la chaine
de caractères avec les AND et les OR, en tout cas inutile.

[ca n'enlève rien en soi à la méthode indiquée par Vincent, qui
s'applique sans problèmes pour d'autres cas.]

La solution donnée par at est déjà bien meilleure dans le principe.

Tu peux écrire une fonction qui prend en argument une chaine de la forme
"a b c" et qui retourne True ou False selon la formule :

r = (a AND b) OR c

Public Function MyEval(ByVal s As String) As Boolean
Dim t() As String

t = Split(s, " ")

MyEval = (CBool(t(0)) And CBool(t(1))) Or CBool(t(2))

End Function

Et pour l'utilisation :

Private Sub Form_Load()
Dim s As String
Dim r As Boolean

' Exemple
s = "1 0 1"
r = MyEval(s)
MsgBox "résultat de eval de " & s & " = " & r
End Sub

Remarque : il serait de toute façon beaucoup plus malin de
traiter le problème à la source, au moment ou tu disposes
de a, b et c.

Il suffit de remarquer que :

SI c = "1" alors
L'expression est VRAI de toute façon (1)
SINON
SI a="0" ou b="0" alors
L'expression est FAUX (0)
SINON
L'expression est VRAI (1)
FIN SI
FIN SI

ce qui donnerait :
Public Function MyEval2(ByVal a As Integer, _
ByVal b As Integer, _
ByVal c As Integer) As Boolean

If c Then
MyEval2 = True
Else
If (Not a) Or (Not b) Then
MyEval2 = False
Else
MyEval2 = True
End If
End Function

Ultime remarque : As tu lu ce qui se fait en général pour
l'implémentation des fichiers séquentiels indexés ?
Si non, tu devrais jeter un oeil, c'est plein de choses intéressantes.
Tu verrais notamment qu'on utilise des méthodes très différentes
de celles-ci pour l'accès aux enregistrements. La méthode que tu veux
employer ici est ok pour une base contenant quelques centaines
d'enregistrements, mais au dela, les performances vont être navrantes.
Si pour ton appli les perfs ne sont pas un problème [ou si les
bases ont très peu d'enregistrements], alors tout roule.

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






1 2