Ovvero, prima
<%
pippo="3" & "*" & "4"
risultato=eval(pippo)
%>
<html>
<%=risultato%>
</html>
vedevo scritto 12, come cavolo faccio in ASPX ????
GRAZIE.
Ovvero, prima
<%
pippo="3" & "*" & "4"
risultato=eval(pippo)
%>
<html>
<%=risultato%>
</html>
vedevo scritto 12, come cavolo faccio in ASPX ????
GRAZIE.
Doulbe.Parse(stringa)
Integer.Parse(striga)
Math.Round(stringa)
uno di questo dovrebbe andare bene![]()
Se non erro, non esiste la funzione Eval in asp.Net. Intendo, una funzione tipo Eval("2 + (3 * 4)" ) che restituisca il calcolo (14).
Ma detto ciò, non è detto che non si possa fare. In rete ci sono molti esempi. Vado a memoria:
1) un esempio faceva riferimento ad una classe creata in jscript (supportato dal framework)
2) un altro esempio utilizzava le espressioni regolari (una cosa veramente interessante)
3) un altro esempio è quello di fare di necessità virtù e fare come in visualbasic6, ossia, utilizzare la capacità di ADO di fare queste cose.
4) un'altra cosa che ho sentito ma che non ho visto lo sviluppo è il sistema di fare una classe al volo con la reflection... :master:
io ho sperimentato il caso 2, ma sono affezionato al metodo 3
di più non so![]()
ciao![]()
Pietro
Per SMS : non funzionano, mi dice che la stringa non è nel formato corretto.
Per PIETRO09 : potresti farmi un esempio con del codice, perfavore ?
Grazie a tutti, comunque.
Di codice adesso non ne ho.
Ma ti invito a fare questo piccolo esperimento.
Prendi un tool di database, per esempio Acces. Crea una qualunque tabella con un campo qualunque, ed un solo record; e prova ad eseguire la seguente query:
SELECT (12+2*(23-4))/(1*(23+5-3))+SQR(12)-SIN(12) FROM DUMMY,
e guarda il risultato.
Capito il trucco?![]()
Adesso non ti sarà difficile scrivere una classe che implementi un parser, che potrai utilizzare in seguito, comodamente, a tuo piacimento.
Ciao![]()
Pietro
Grazie, ma non ho capito. Ti invio il codice della pagina (il primo programma che sto facendo per cercare di capire il VB NET : è una semplicissima calcolatrice.).
----------------- inizio codice -----------------------------
<%@ Page Language="VB" debug="true" %>
<script runat="server">
dim a,b,c,d as double
dim pippo as string
sub page_load() 'lo fa ogni volta che carica la pagina
' lo lascio vuoto
end sub
sub esegui (obj as object,e as eventargs)
if obj.text="C" then
cancella
exit sub
end if
if not isnumeric(primo.text) or not isnumeric(secondo.text) then
risultato.text="Valori immissione errati !!"
else
a=cint(primo.text):b=cint(secondo.text)
'qui sotto prima avrei scritto :
risultato.text=eval(a & obj.text & b)
'ma non funziona, cosa devo scrivere la posto della riga sopra ?
end if
end sub
sub cancella
primo.text="":secondo.text="":risultato.text=""
end sub
</script>
</html>
<body>
PROVA NUOVA PAGINA ASPX
<form runat=server>
Valore1 :
<asp:textbox size=6 id=primo runat=server/>
  
Valore2 :
<asp:textbox size=6 id=secondo runat=server/>
     
<asp:button id="per" text="*" onclick=esegui runat=server/>
     
<asp:button id="piu" text="+" onclick=esegui runat=server/>
     
<asp:button id="meno" text="-" onclick=esegui runat=server/>
     
<asp:button id="fratto" text="/" onclick=esegui runat=server/>
     
<asp:button id="canc" text="C" onclick=esegui runat=server/>
Risultato : <asp:label id=risultato font-size="30pt" runat=server/>
</form>
</body>
</HTML>
-------------------- fine codice ------------------------------
Come sempre, sms ha intuito giusto.Allora, basta che segua il suo consiglio.
![]()
a=cint(primo.text):b=cint(secondo.text)
'qui sotto prima avrei scritto :
risultato.text=eval(a & obj.text & b)
risultato.text = (a + b).tostring()
SE USAVI EVAL IN ASP, sbagliavi in asp
Pietro
In quanto, in base al bottone schiacciato, in obj.text posso avere
+,-,*,/
E, volendo fare tutto in una chiamata unica, prendendo come input 8 e 4
posso avere
8 + 4
8 - 4
8 * 4
8 / 4 dove l' operatore è appunto obj.text
in asp, facendo eval(a + "x" + b), dove x è variabile, ottenevo il risultato voluto.
Senti, non te la prendere, ma ognuno ha il proprio punto di vista.
Per quanto mi riguarda non ho mai visto utilizzare Eval per compiti così elementari (un classico select case è quello che si vede in giro)
In javascript lo uso, ma solo con parsimonia, e solo quando serve.
In ASP non l'ho mai usato, e già che qualcosa ho fatto anch'io.
In VisualBasic 6, non esiste questa funzione.
In C++ credo che non esista
In vb.net credo che non esista.
In javascript ho sentito che è deprecato
insomma, ci deve pur essere una ragione, se tanti linguaggi seri non usano eval.
Di più non so. Ciao![]()
Pietro
codice:Private Sub esegui(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles per.Click, piu.Click, canc.Click, fratto.Click, meno.Click Dim cmd As Button = DirectCast(sender, Button) If cmd.Text.ToLower = "c" Then Me.primo.Text = "" Me.secondo.Text = "" Me.risultato.Text = "" Else Dim a%, b% If Not IsNumeric(Me.primo.Text) OrElse Not IsNumeric(Me.secondo.Text) Then Me.risultato.Text = "valori non validi" Return End If Dim s$ = (Me.primo.Text & cmd.Text & Me.secondo.Text) Dim tmp# = Eval(s) Me.risultato.Text = s & " = " & tmp.ToString End If End Sub Private Function Eval#(ByVal s$) Return CDbl(Libreria.RisultatoAggregazioneSQL(StringaConnessione, String.Format("SELECT {0} AS V FROM EVAL", s))) End Function Private ReadOnly Property StringaConnessione$() Get Return String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source={0};Mode=Share Deny None;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False", "C:\DATI\test\test.mdb") End Get End Property
Pietro