Ejecutar un String

13/11/2009 - 19:18 por Carlos de la B | Informe spam
Saludos a todos,

Estoy tratando de hacer una clase que ejecute un string.
De esta manera:

double result = Eval("Sqr(Sin(12) * Cos(6)) * 28");

La idea es pasar un string con una fórmula matematica y que el resultado sea
un double.

Podría darme alguien alguna pista de como seguir.

Muchas gracias,
carlosdelab

Preguntas similare

Leer las respuestas

#6 César
16/11/2009 - 19:00 | Informe spam
Creo que alguien habia dicho que era muy lento. No es asi?


"Jesús López" escribió en el mensaje
news:
También puedes usar la clase Eval de JScript.

Añades una referencia a los ensamblados:

Microsoft.Vsa
Microsoft.JScript

Y ya puedes escribir un código como este:

Microsoft.JScript.Vsa.VsaEngine engine =
Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
object result = Microsoft.JScript.Eval.JScriptEvaluate("3 + 4 * 5",
engine);
MessageBox.Show(result.ToString());


Saludos:

Jesús López


"Carlos de la B" wrote in message
news:
Saludos a todos,

Estoy tratando de hacer una clase que ejecute un string.
De esta manera:

double result = Eval("Sqr(Sin(12) * Cos(6)) * 28");

La idea es pasar un string con una fórmula matematica y que el resultado
sea
un double.

Podría darme alguien alguna pista de como seguir.

Muchas gracias,
carlosdelab



Respuesta Responder a este mensaje
#7 Anonimo
17/11/2009 - 03:00 | Informe spam
Jesús. Los espacios "Microsoft.Algo" son obsoletos. Aunque si quieres usar
JScript como motor lo puede hacer (el rendimiento es por supuesto menor que
C#).
Puedes usar CodeDomProvider, p.e.:

string code = "class Function "
+ "{"
+ " function Evaluate(x) {return " + Function + ";}"
+ "}";

...
CodeDomProvider cdp = CodeDomProvider.CreateProvider("JScript");
...
(El resto es igual)

Saludos
<Harvey Triana />


"Jesús López" escribió en el mensaje de
noticias:
También puedes usar la clase Eval de JScript.

Añades una referencia a los ensamblados:

Microsoft.Vsa
Microsoft.JScript

Y ya puedes escribir un código como este:

Microsoft.JScript.Vsa.VsaEngine engine =
EvaluateJScript.JScript.Vsa.VsaEngine.CreateEngine();
object result = Microsoft.JScript.Eval.JScriptEvaluate("3 + 4 * 5",
engine);
MessageBox.Show(result.ToString());


Saludos:

Jesús López


"Carlos de la B" wrote in message
news:
Saludos a todos,

Estoy tratando de hacer una clase que ejecute un string.
De esta manera:

double result = Eval("Sqr(Sin(12) * Cos(6)) * 28");

La idea es pasar un string con una fórmula matematica y que el resultado
sea
un double.

Podría darme alguien alguna pista de como seguir.

Muchas gracias,
carlosdelab



Respuesta Responder a este mensaje
#8 Carlos de la B
17/11/2009 - 07:00 | Informe spam
Muchas Gracias Harvey!!
de gran ayuda ire comentando que tal me fue
Saludos
Carlos de la B.

"<Harvey Triana />" wrote:

El artículo de Gustavo Cantero es preciso. Quisiera agregar que cuando la
expresión trae parámetros, es necesario implementar algo más de código
(medianoche también).
Por ejemplo, tienes la expresión f( X)=x^3+x^2+1, donde x es un parámetro
variable. Bien el código puede ser:

public static double Evaluate(string Function, double x)
{
string code = "using System;"
+ "public class Function "
+ "{"
+ " public double Evaluate(double x) {return " + Function
+ ";}"
+ "}";

CompilerParameters p = new CompilerParameters()
{
GenerateInMemory = true, GenerateExecutable = false,
IncludeDebugInformation = false
};

CodeDomProvider cdp = CodeDomProvider.CreateProvider("CSharp");
CompilerResults r = cdp.CompileAssemblyFromSource(p, code);

object f = r.CompiledAssembly.CreateInstance("Function", false,
BindingFlags.CreateInstance, null, null, null, null);
// now, f is an instance of Function class ...
return (double)f.GetType().InvokeMember("Evaluate",
BindingFlags.InvokeMethod, null, f, new object[] { x });
}

Nota el ultimo parámetro de InvokeMember ... Es acá donde paso los
parámetros a la función

Y se ejecuta de la siguiente manera (p.e. deseo f(0.5))

lblResult.Text = Evaluate("Math.Pow(x, 3) + Math.Pow(x, 2) + 1",
0.5D).ToString();

Saludos,
<Harvey Triana />

"Gustavo Cantero" escribió en el mensaje de
noticias:
> Carlos:
> Al leer tu pregunta recordé que hace unos años hice esto mismo, por eso
> acabo de escribir un artículo en nuestro blog donde lo explico. La
> dirección del mismo es
> http://www.programandoamedianoche.c...jecutarla.
> Espero te sea de utilidad.
> Suerte!
>
> Gustavo A. Cantero
> Scientia® Soluciones Informáticas
> MCP - MCSD - MCTS - MCPD
> http://www.scientia.com.ar
> http://www.programandoamedianoche.com
> http://foro.scientia.com.ar
>
>
> De: Carlos de la B [mailto:]
> Expuesto a las: Viernes, 13 de Noviembre de 2009 03:18 p.m.
> Expuesto en: microsoft.public.es.csharp
> Conversación: Ejecutar un String
> Asunto: Ejecutar un String
>
> Saludos a todos,
>
> Estoy tratando de hacer una clase que ejecute un string.
> De esta manera:
>
> double result = Eval("Sqr(Sin(12) * Cos(6)) * 28");
>
> La idea es pasar un string con una fórmula matematica y que el resultado
> sea
> un double.
>
> Podría darme alguien alguna pista de como seguir.
>
> Muchas gracias,
> carlosdelab
>
Respuesta Responder a este mensaje
#9 Carlos de la B
17/11/2009 - 07:00 | Informe spam
Muchas Gracias Gustavo,

Recien hoy he podido volver a acceder al foro y ha sido de mucha utilidad tu
post en el blog.

Saludos
Gracias
Carlos de la B

"Gustavo Cantero" wrote:

Carlos:
Al leer tu pregunta recordé que hace unos años hice esto mismo, por eso
acabo de escribir un artículo en nuestro blog donde lo explico. La
dirección del mismo es
http://www.programandoamedianoche.c...jecutarla.
Espero te sea de utilidad.
Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


De: Carlos de la B [mailto:]
Expuesto a las: Viernes, 13 de Noviembre de 2009 03:18 p.m.
Expuesto en: microsoft.public.es.csharp
Conversación: Ejecutar un String
Asunto: Ejecutar un String

Saludos a todos,

Estoy tratando de hacer una clase que ejecute un string.
De esta manera:

double result = Eval("Sqr(Sin(12) * Cos(6)) * 28");

La idea es pasar un string con una fórmula matematica y que el resultado
sea
un double.

Podría darme alguien alguna pista de como seguir.

Muchas gracias,
carlosdelab

.

Respuesta Responder a este mensaje
#10 Juan Carlos Flores
20/11/2009 - 21:40 | Informe spam
Result=&_MiString

"Carlos de la B" escribió en el mensaje de
noticias:
Saludos a todos,

Estoy tratando de hacer una clase que ejecute un string.
De esta manera:

double result = Eval("Sqr(Sin(12) * Cos(6)) * 28");

La idea es pasar un string con una fórmula matematica y que el resultado
sea
un double.

Podría darme alguien alguna pista de como seguir.

Muchas gracias,
carlosdelab
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida