Newsgroup: it.comp.lang.visual-basic
Titolo: Espressione bool in stringa

Come posso risolvere un'espressione booleana contenuta in una stringa?
'Controllo che contiene espressione
txtEx.Text = "((True AND False) Or False)
if txtEx.Text then... 'Errore...
Grazie
--------------------------------
Inviato via 
http://usenet.libero.it

 txtEx.Text = "((True AND False) Or False)
Ho la vaga idea che ti devi costruire un parserino!
Magari cè in giro qualk!
MIk


Non ne sono sicuro al 100% ma dovrebbe essere cosě
if boolean.parse(txtEX.text) then
Prova e fammi sapere


 if boolean.parse(txtEX.text) then
Versione ante-NET: CBool(txtEX.Text)

 Magari cè in giro qualk!
Sono solo 12 mesi che ce l'ho in firma :)
Ciao
--
Math Parser, VB.Framework : 
http://www.neodatatype.net
Sito Comune               : 
http://www.it-lang-vb.net

Pericle Malnati ebbe il coraggio di dire:

Incurisito ho provato ma un bel tipo non corrispondente mi ha stroncato
subito!
MIk


bhe devi essere sicuro che il tipo sia corretto per fare il parsing. ( true,
false) altrimenti ti da errore, mi pare che xo' non ci possa essere che uno
dei 2 valori dentro
Olix


 essere che uno dei 2 valori dentro
beh forse si, se cè scritto solo true o false magari funziona,
ma non fa il parse della stringa!
MIk

 Ciao
Ciao!
MIk


MMMMMM bhe e che fa allora? Ovvio che devi intercettare un eventuale errore.
e cmq se non vi piace si può sempre fare
if txtEX.text.toupper = "TRUE" then
ma è meno raffinato e personalmente non mi piace, ma funziona


 Lo so ma non sapevo se era anche parser booleano!!! :-)
Anche di stringhe :)
Es:
"It's " & (2 = 1 + 1) " that 2=" & (1 + 1) & "?"
viene valutata come
"It's True that 2=2?"


 errore. e cmq se non vi piace si può sempre fare
Non riesce sicuramente a risolvere
txtEx.Text = "((True AND False) Or False)"
Che è quello che interessava a Giuseppe!
magari risolve smplicemente:
txtEx.Text = "True"
MIk

[CUT]
Esagerato! Bello!
Appena ho un attimo lo provo!!!
MIk


infatti deve fare cosě
txtEx.Text = espressione BOOLEANA senza apici, questo fa un cast automatico
es
txtEX.text = True AND False
Zao Zao
Olix



iforse ho semplicemente ragione io
if cbool(txtex.text) then
else
endif
io ho fatto delle prove e sembri che funzioni, fammi sapere so curioso

 io ho fatto delle prove e sembri che funzioni, fammi sapere so curioso
E che prove hai fatto? :)
? CBool("true or false") --> Tipo non corrispondente.
Una prova piů semplice di cosě...



Ma la valutazione dell'espr la fa prima lui spero
Ciao :)


 ? CBool("true or false") --> Tipo non corrispondente.
Infatti ho provato anch'io e non funziona!
Non capisco cosa stanno provando loro!
MIk

 Ma la valutazione dell'espr la fa prima lui spero
Lui chi??
MIk


Giuseppe...
 azz :)
Olix


 ha scritto nel messaggio
news:bgnml4$p841v$1...@ID-165476.news.uni-berlin.de...

scusate ho sbagliato a postare cbool(val(txtex.text))
pardon


ALLORA UNA VOLTA PER TUTTE.
Se si deve fare il parse di "true or false" è una cosa
Se si deve fare il parse di "True" oppure "False" è un'altra.
Ora Per evitare gli errori si DEVE fare
txtEx.text = True or False
Che da come risultato:
txtex.text vale True cBool(txtEX.text) vale True non da errori
se la cosa va presa da un textbox già fatto, bhe è più una rogna.... si può
fare una funzioncina che estrae operatori e valori True e False e valutare
tale espressione
(in vb6 con funzione middle, in net .substring)
Olix


 scusate ho sbagliato a postare cbool(val(txtex.text))
Ma non mi sembra che cambia tanto!
((true AND true) OR true)
mi restituisce false
e anche a cambiarla da sempre false....
mah...
MIk


AH beh... con un bel parser!
MIk

 scusate ho sbagliato a postare cbool(val(txtex.text))
Ma hai letto la guida di Val()? :)
Val restituisce un double se la stringa è interpretabile come numero con
eventualmente il "." come separatore decimale.
Ovviamente, dato che "true", "false", "true or false" NON possono essere
numeri verranno sempre convertiti in 0 (zero) che cavertito in Bool è SEMPRE
false.
Le prove si fanno valutando tutte le possibilità :) altrimenti che cosa
provi?


 ha scritto nel messaggio
news:nmJXa.29619$cl3.1...@news2.tin.it...

ok va bene , ho sbagliato.. mettetemi al rogo e facciamola finita quanto
prima
buon lavoro a tutti
--
Ciao
Alfredo
Vb6+Sp5+Win2k

 (in vb6 con funzione middle, in net .substring)
la MIddle mi è nuova!!!
MIk - LOL

 La conosci?
di vista, siamo usciti qualche volta ma non andiamo tanto d'accordo!
MIk

 MIk - LOL
Azz č un anno che non uso Vb6 permetterai qualche errore, sempre ne abbia
fatti :P
$mid(str,Start, end)
La conosci?


Scusate, ma nel frattempo ho trovato una soluzione anche se non e' da
manuale:
    Dim a As String
    Dim rs As Recordset
    Dim db As Database
    Set db = Workspaces(0).OpenDatabase("db.mdb")
    a = "SELECT " & txtEv & " AS esprValutata FROM tabQualsiasi;"
    Set rs = db.OpenRecordset(a)
    If rs.Fields("esprValutata") Then
        txtDebug = "True 1"
    Else
        txtDebug = "False 1"
    End If


 [CUT]
Ah..però!
bella idea! Complimenti...
MIk


azz.... della serie UCCF (Ufficio Complicazioni Cose Facili)
A che ti serve un campo calcolato????
Mha....
Non riesco a capirti....


 A che ti serve un campo calcolato????
Ma tu percaso avevi tovato un'altra soluzione???
MIk

ma gli passi l'oggeto???? mmm va bhe
                 I
                 I
                \ /
a = "SELECT " & txtEv & " AS esprValutata FROM tabQualsiasi;"
ti funge sta cosa? ok va bene allora


 a = "SELECT " & txtEv & " AS esprValutata FROM tabQualsiasi;"
Non gli sta passando l'oggetto!
Gli sta passando la stringa, txtEv.text!
MIk

te l'ho detto se funziona ditemelo che mi interessa...
se la stringa è formattata male funge?
ora sono curioso


 txtEx.Text = "((True AND False) Or False)
Aggiungi ai riferimenti "MS script control"
Dim a As New ScriptControl
a.Language = "vbscript"
MsgBox a.Eval("((True AND False) Or False)")
Set a = Nothing
termoPilucco.

 subito!
mmmh... hai provato con True o con Vero? Mi sembra che le funzioni C*
dipendano dalle impostazioni locali. Se, ad esempio, CStr(True) dà Vero,
sarà soltanto CBool("Vero") che darà True.



Fortunatamente... qualcuno ha scritto l'unica cosa sensata da fare.

 Fortunatamente... qualcuno ha scritto l'unica cosa sensata da fare.
Non potevi postarla tu al posto che fare questi commenti molto utili??
MIk



Ho visto il thread quando era gia' stato postato il suggerimento ...
... il mio commento e' utile perche' sottolinea il procedimento corretto
proposto dal buon termopilucco che altrimenti sarebbe passato anonimo fra
post deliranti (ma la colpa e' del caldo) :P

 Fortunatamente... qualcuno ha scritto l'unica cosa sensata da fare.
Il mio č migliore e circa il 25% piů veloce dello MsScriptControl. :)
E anche il mio post era sensato >:)


Ciao
In effetti non mi riferivo al tuo post...
sicuramente NeoDataType e' un ottimo controllo che non da problemi di sorta,
tu fai bene a pubblicizzarlo e il tuo post era piu' che sensato... 
In ogni caso si tratta sempre di un controllo aggiuntivo ... quando se ne ha
gia' a disposizione uno, del quale si conosce gia' la sintassi e le
potenzialita' e che include la possibilita' di scripting, del quale so che
sara' sempre supportato ecc ecc ...  quindi ritengo che nel caso specifico
rimanga da preferire il controllo MS.

 sara' sempre supportato ecc ecc ...
haha! :)
Ma hai visto a che data risale l'ultima compilazione disponibile del Ms
ScriptControl?
Per il resto posso essere d'accordo, entro certi limiti.
