Evaluacion de formulas en vb.net... ¿como?

26/08/2005 - 22:16 por Ariel | Informe spam
Hola gente, alguien sabe si hay alguna forma de hacer lo siguiente que
no sea codificar un analizador de formulas?. Lo que necesito es evaluar
una operacion matematica conteniada en una cadena.

por ejemplo x = "(50 * 80) /100"

lo que necesito es algo que me diga que eso es 40.

En realidad tengo una tabla de formulas con variables, tipo:
Formula 1 = ([var1] * [var2]) / [var3]
Formula 2 = ([var1] / [var2])

y tengo que recorrer otra tabla y segun el valor de un campo de cada
registro, aplicar el resultado de una formula a otro campo.

Gracias!.
 

Leer las respuestas

#1 Pedro M.Ferrando Moya
26/08/2005 - 23:03 | Informe spam
Usa este pequeño truco para crearte una función de evaluación de fórmulas
usando un programa compilado en memoria con JScript .Net, que si tiene esa
función:


Imports System.CodeDom.Compiler
Imports System.Reflection
Imports Microsoft.JScript

Public Module Evaluator

Public Function Eval(ByVal ai_sFormula As String) As String

Dim _evaluator As Object
Dim _evaluatorType As Type
Dim _jscriptSource As String = "class Evaluator" & vbCrLf & "{" &
vbCrLf & "public function Eval(expr : String) : String" & vbCrLf & "{" &
vbCrLf & "return eval(expr); " & vbCrLf & "}" & vbCrLf & "}" & vbCrLf

Dim compiler As ICodeCompiler
compiler = New JScriptCodeProvider().CreateCompiler()

Dim parameters As New CompilerParameters
parameters.GenerateInMemory = True

Dim results As CompilerResults
results = compiler.CompileAssemblyFromSource(parameters,
_jscriptSource)

Dim oA As [Assembly]
oA = results.CompiledAssembly
_evaluatorType = oA.GetType("Evaluator")
_evaluator = Activator.CreateInstance(_evaluatorType)
Return _evaluator.Eval(ai_sFormula)

End Function

End Module




"Ariel" escribió:

Hola gente, alguien sabe si hay alguna forma de hacer lo siguiente que
no sea codificar un analizador de formulas?. Lo que necesito es evaluar
una operacion matematica conteniada en una cadena.

por ejemplo x = "(50 * 80) /100"

lo que necesito es algo que me diga que eso es 40.

En realidad tengo una tabla de formulas con variables, tipo:
Formula 1 = ([var1] * [var2]) / [var3]
Formula 2 = ([var1] / [var2])

y tengo que recorrer otra tabla y segun el valor de un campo de cada
registro, aplicar el resultado de una formula a otro campo.

Gracias!.

Preguntas similares