Visual Basic - ejecutar cadena "3+4"

Life is soft - evento anual de software empresarial
 
Vista:

ejecutar cadena "3+4"

Publicado por Arturo Rodriguez (1 intervención) el 22/10/2003 04:42:05
Hola, Alguien me pude ayudar a ejecutar una cadena dada por el usuario, la cual puede variar, el ejemplo mas simple es:
a="3+4"
ejecutar cadena(a)
el programa me debe dar 7 en numerico
pero tambien puede haber ( ), /, *, +, -
por ejemplo a= "((34+3)/4)*10
Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ejecutar cadena

Publicado por Cecilia Colalongo (3116 intervenciones) el 22/10/2003 10:55:36
Lo puedes hacer con Script Control:

Resultado = ScriptControl1.Eval(a)

En http://www.microsoft.com/mind/0799/script/script.asp tienes documentación del control.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecutar cadena

Publicado por alberto (41 intervenciones) el 23/10/2003 19:35:32
Que tal, hasta donde yo se no existe nada que te interprete un función y la ejecute, ya sea 3+4, (5*3+3/5), lo que sea.

Lo que te sugieren en el punto anterior no lo he probado.

Lo que si he hecho para una aplicacion que desarrolle, y es lo que te recomiendo, es armar un interprete de funciones, es decir un programa que se encarge de leer la cadena "3+4", y que sea el el que efectúe la operacion 3+4 y devuelva el resultado. Para ello lo recomendable es pensar en un diseño de arbol, que te interpreta la cadena, y genera un arbol gerárquico, el cual se ejecuta desde el nodo inferior al superior.

ej 3+5*2

+
/ 3
*
/ \
5 2

se interpreta: el 5 y el 2 se dependen del operador * (multiplicacion) y el resultado de esto es tomado por el operador + junto con el 3.

Saludos y suerte.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecutar cadena

Publicado por Cecilia Colalongo (3116 intervenciones) el 24/10/2003 02:57:47
¿Por qué no lo pruebas y comparas luego? lo que dices termina siendo un autómata finito no determinístico y para hacerlo deberías armar la matriz del mismo y su correspondiente parser, no es algo imposible pero mucho más largo que utilizar un método que ya lo tiene resuelto ¿no crees?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecutar cadena

Publicado por alberto (41 intervenciones) el 24/10/2003 18:28:03
Esta bien no te enoges?, solo di mi opinion.

No pongo en duda la funcionalidad ese objeto, simplemente en mi experiencia me fue mejor armarlo yo mismo, era más eficiente para mis necesidades, porque además necesitaba implementar funciones particulares como "Sen(X)", o como "SueldoBase()" (funcion que consultaba una base de datos y retornaba el sueldo base de un usuario en particular - es mucho mas personalizable, al estilo excel - , por otra parte armar parseador no es algo tan dificil, tengo que reconocer que yo me base en un código de C++ que utilizaba una estructura con listas, lo que hice fue recodificar dicho fuente en VB y además arreglar un par de errores y agregarle la funcionalidad de interpretar funciones adicioneles como la que te mostre.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecutar cadena

Publicado por Cecilia Colalongo (3116 intervenciones) el 24/10/2003 22:49:59
No eres el único que ha armado parseadores no hace falta que presumas, solo te dije que compares primero y opines después, nada más que eso. Lo que nombras también lo puedes hacer con ese objeto ya que tiene incorporado toda la funcionalidad de VBScript.

Para dar una opinión conviene revisar primero las opciones disponibles.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ejecutar cadena

Publicado por alberto (41 intervenciones) el 24/10/2003 23:52:41
OK lo voy a tener en cuenta la proxima ves que vaya a opinar.

Gracias.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar