de cadena a booleano

10/10/2007 - 11:06 por Vicente García | Informe spam
Hola,

Tengo en una base de datos datos en un campo STRING datos del estilo "a >
100" o "a > b". En mi aplicación obtengo esa cadena de la base de datos y
quiero leer esos datos y escribir una condición del tipo: if (a > 100) o
if(a > b) pero no sé como evaluar esa cadena ya que dice que no se puede
evaluar la cadena como una condición. Si lo convierto a BOOLEAN sigue dando
error, aunque esta vez de ejecución. Las variables a y b estaría definidas
en el programa previamente. Es decir, lo que quiero es evaluar la condición
que se representa en una cadena de texto. ¿Se podrá hacer?

Muchísimas gracias
Vicente.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
10/10/2007 - 11:28 | Informe spam
"Vicente García" wrote in message
news:
Tengo en una base de datos datos en un campo STRING datos del estilo "a >
100" o "a > b". En mi aplicación obtengo esa cadena de la base de datos y
quiero leer esos datos y escribir una condición del tipo: if (a > 100) o
if(a > b) pero no sé como evaluar esa cadena ya que dice que no se puede
evaluar la cadena como una condición. Si lo convierto a BOOLEAN sigue
dando error, aunque esta vez de ejecución. Las variables a y b estaría
definidas en el programa previamente. Es decir, lo que quiero es evaluar
la condición que se representa en una cadena de texto. ¿Se podrá hacer?



Se puede hacer pero no es nada fácil. A diferencia de otros lenguajes en
los que tienes una función de tipo EVAL o similar, a la que le pasas una
expresión y te la evalúa, en C# no hay nada parecido. Para implementarlo
tienes dos opciones:

1) Escribir la expresión como si fuera un fragmento de programa en C#,
compilarla en memoria (con la clase CSharpCompiler), cargarla y ejecutarla.
Si necesitas que acceda a las variables tales como a y b que están en tu
programa, la cosa se complica un poquillo porque tendrás que hacérselas
llegar de alguna manera.

2) Escribir un analizador e intérprete de expresiones dentro de tu propio
código. La complejidad de esta tarea depende de qué tipos de expresiones
vayas a admitir. Si solo son del tipo a>constante o a>b es relativamente
fácil, pero si quieres cualquier expresión genérica se empieza a complicar
la cosa.

De ambos métodos hay multitud de ejemplos en la red. Por ejemplo, si te
vas a www.codeproject.com y haces una búsqueda con las palabras "evaluate
expression" te saldrán varias docenas de artículos con código fuente
incluido.
Respuesta Responder a este mensaje
#2 Vicente García
10/10/2007 - 12:35 | Informe spam
Hola,

Para no complicarme la vida busqué y encontré una clase que evalúa
expresiones numéricas en
http://www.msnewsgroups.net/group/m...38122.aspx
Como yo tenía conficiones por ejemplo del tipo if (a > 5) lo que hago es lo
siguiente:

strValor = strValor.Replace("a", Convert.ToString(a)); //El valor de 'a' lo
tengo en la variable 'a'
if (Convert.ToBoolean(QuickEvaluator.Evaluate(strValor))) //Le paso al
método estático la condición con el valor de 'a' en lugar de con 'a'
{
}

Muchas gracias por tu ayuda y por tu pronta respuesta.
Saludos,
Vicente.

"Alberto Poblacion"
escribió en el mensaje de noticias
news:OWMN1$
"Vicente García" wrote in message
news:
Tengo en una base de datos datos en un campo STRING datos del estilo "a >
100" o "a > b". En mi aplicación obtengo esa cadena de la base de datos y
quiero leer esos datos y escribir una condición del tipo: if (a > 100) o
if(a > b) pero no sé como evaluar esa cadena ya que dice que no se puede
evaluar la cadena como una condición. Si lo convierto a BOOLEAN sigue
dando error, aunque esta vez de ejecución. Las variables a y b estaría
definidas en el programa previamente. Es decir, lo que quiero es evaluar
la condición que se representa en una cadena de texto. ¿Se podrá hacer?



Se puede hacer pero no es nada fácil. A diferencia de otros lenguajes en
los que tienes una función de tipo EVAL o similar, a la que le pasas una
expresión y te la evalúa, en C# no hay nada parecido. Para implementarlo
tienes dos opciones:

1) Escribir la expresión como si fuera un fragmento de programa en C#,
compilarla en memoria (con la clase CSharpCompiler), cargarla y
ejecutarla. Si necesitas que acceda a las variables tales como a y b que
están en tu programa, la cosa se complica un poquillo porque tendrás que
hacérselas llegar de alguna manera.

2) Escribir un analizador e intérprete de expresiones dentro de tu
propio código. La complejidad de esta tarea depende de qué tipos de
expresiones vayas a admitir. Si solo son del tipo a>constante o a>b es
relativamente fácil, pero si quieres cualquier expresión genérica se
empieza a complicar la cosa.

De ambos métodos hay multitud de ejemplos en la red. Por ejemplo, si te
vas a www.codeproject.com y haces una búsqueda con las palabras "evaluate
expression" te saldrán varias docenas de artículos con código fuente
incluido.

Respuesta Responder a este mensaje
#3 Guillermo guille
10/10/2007 - 18:37 | Informe spam
OJO con ese evaluador, que falla con los decimales...

Por ejemplo, esto lo hace mal:
125*10.5
Da como resultado 13125 cuando debería ser 1312.5
y si se hacen estas comparaciones... ¡en las dos da True!
(125*10.5) == 13125
(125*10.5) == 1312.5

Y lo mismo con cualquier cosa que tenga decimales:
125*10 == 1250
125*10 == 125.0

Es que después de tirarme varios días haciendo mi evaluador de expresiones
(en realidad calcular no evaluar) y veo ese link, pues me dió un vuelco el
alma, je, je...
creo que el problema es que no gestiona números decimales... al menos si la
configuración regional tiene la coma como separador decimal, el problema es
que tal como está el código no acepta comas como separador decimales... y
como internamente usa el punto, pues al convertir la cadena en número...
pasa lo que pasa... es cuestión de cambiar el código para que esas
"evaluaciones" las haga bien.

Nos vemos
Guillermo

Microsoft MVP Visual Basic desde 1997
Tus consultas en los foros del Guille: http://foros.elguille.info/


"Vicente García" wrote in message
news:
Hola,

Para no complicarme la vida busqué y encontré una clase que evalúa
expresiones numéricas en
http://www.msnewsgroups.net/group/m...38122.aspx
Como yo tenía conficiones por ejemplo del tipo if (a > 5) lo que hago es
lo siguiente:

strValor = strValor.Replace("a", Convert.ToString(a)); //El valor de 'a'
lo tengo en la variable 'a'
if (Convert.ToBoolean(QuickEvaluator.Evaluate(strValor))) //Le paso al
método estático la condición con el valor de 'a' en lugar de con 'a'
{
}

Muchas gracias por tu ayuda y por tu pronta respuesta.
Saludos,
Vicente.

"Alberto Poblacion"
escribió en el mensaje de noticias
news:OWMN1$
"Vicente García" wrote in message
news:
Tengo en una base de datos datos en un campo STRING datos del estilo "a
> 100" o "a > b". En mi aplicación obtengo esa cadena de la base de
datos y quiero leer esos datos y escribir una condición del tipo: if (a
> 100) o if(a > b) pero no sé como evaluar esa cadena ya que dice que no
se puede evaluar la cadena como una condición. Si lo convierto a BOOLEAN
sigue dando error, aunque esta vez de ejecución. Las variables a y b
estaría definidas en el programa previamente. Es decir, lo que quiero es
evaluar la condición que se representa en una cadena de texto. ¿Se podrá
hacer?



Se puede hacer pero no es nada fácil. A diferencia de otros lenguajes
en los que tienes una función de tipo EVAL o similar, a la que le pasas
una expresión y te la evalúa, en C# no hay nada parecido. Para
implementarlo tienes dos opciones:

1) Escribir la expresión como si fuera un fragmento de programa en C#,
compilarla en memoria (con la clase CSharpCompiler), cargarla y
ejecutarla. Si necesitas que acceda a las variables tales como a y b que
están en tu programa, la cosa se complica un poquillo porque tendrás que
hacérselas llegar de alguna manera.

2) Escribir un analizador e intérprete de expresiones dentro de tu
propio código. La complejidad de esta tarea depende de qué tipos de
expresiones vayas a admitir. Si solo son del tipo a>constante o a>b es
relativamente fácil, pero si quieres cualquier expresión genérica se
empieza a complicar la cosa.

De ambos métodos hay multitud de ejemplos en la red. Por ejemplo, si te
vas a www.codeproject.com y haces una búsqueda con las palabras "evaluate
expression" te saldrán varias docenas de artículos con código fuente
incluido.




Respuesta Responder a este mensaje
#4 principiante
12/10/2007 - 20:53 | Informe spam
Creo haber leido que en la nueva version se puede hacer tambien con "arboles
de expresion" creando la funcion en runtime.

Jose TH


"Alberto Poblacion"
escribió en el mensaje news:OWMN1$
"Vicente García" wrote in message
news:
Tengo en una base de datos datos en un campo STRING datos del estilo "a >
100" o "a > b". En mi aplicación obtengo esa cadena de la base de datos y
quiero leer esos datos y escribir una condición del tipo: if (a > 100) o
if(a > b) pero no sé como evaluar esa cadena ya que dice que no se puede
evaluar la cadena como una condición. Si lo convierto a BOOLEAN sigue
dando error, aunque esta vez de ejecución. Las variables a y b estaría
definidas en el programa previamente. Es decir, lo que quiero es evaluar
la condición que se representa en una cadena de texto. ¿Se podrá hacer?



Se puede hacer pero no es nada fácil. A diferencia de otros lenguajes en
los que tienes una función de tipo EVAL o similar, a la que le pasas una
expresión y te la evalúa, en C# no hay nada parecido. Para implementarlo
tienes dos opciones:

1) Escribir la expresión como si fuera un fragmento de programa en C#,
compilarla en memoria (con la clase CSharpCompiler), cargarla y
ejecutarla. Si necesitas que acceda a las variables tales como a y b que
están en tu programa, la cosa se complica un poquillo porque tendrás que
hacérselas llegar de alguna manera.

2) Escribir un analizador e intérprete de expresiones dentro de tu
propio código. La complejidad de esta tarea depende de qué tipos de
expresiones vayas a admitir. Si solo son del tipo a>constante o a>b es
relativamente fácil, pero si quieres cualquier expresión genérica se
empieza a complicar la cosa.

De ambos métodos hay multitud de ejemplos en la red. Por ejemplo, si te
vas a www.codeproject.com y haces una búsqueda con las palabras "evaluate
expression" te saldrán varias docenas de artículos con código fuente
incluido.

Respuesta Responder a este mensaje
#5 Alberto Poblacion
13/10/2007 - 10:19 | Informe spam
"principiante" wrote in message
news:
Creo haber leido que en la nueva version se puede hacer tambien con
"arboles de expresion" creando la funcion en runtime.



Sí, pero necesitas el Framework 3.5 y Visual Studio 2008, que aún están
en "beta".
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida