Clase: clsEvalua

Fecha: 11/Sep/97
Autor: David Garza


Clase: clsEvalua. Manual de Uso.

 

Este archivo contiene una descripción de las propiedades y métodos de la clase clsEvalua, útil para analizar expresiones matemáticas y proporcionar el resultado de la evaluación.

 

Uso de la Clase:

Por su calidad de Clase, es muy cómodo utilizar sus posibilidades como una instancia u objeto en cualquier parte del programa que lo necesite, sin desperdiciar recursos del sistema (Como con los Módulos de Código). Esta clase funciona sin problemas en VB4 (De 16 y 32 bits) y en VB5.

Para utilizarla, deben añadirse tanto la clase clsEvalua (clsEvalu.cls) como clsVariable (clsVaria.cls) al proyecto. Si no sabe cómo agregar clases a su proyecto, consulte la ayuda en línea o su manual de usuario.

En seguida, proceda a declarar una nueva instancia de la clase clsEvalua en algún lugar de su código, digamos en el área General_Declarations (General_Declaraciones). Puede hacerlo como sigue:

Private objEvalua As New clsEvalua

(Opcionalmente podría hacerlo como sigue:

Private objEvalua As clsEvalua

y agregar en el evento Form_Load

Private Sub Form_Load()

Set objEvalua = New clsEvalua

End Sub

 

De las dos formas funcionará igual)

Una vez que tiene el objeto, ya puede hacer uso de él. La forma más rudimentaria de hacerlo trabajar es como sigue:

objEvalua.CadEvaluar = "5 + 3 * 8" ' No importan los espacios.

MsgBox "El resultado es: " & objEvalua.AnalizaFormula

Así, en dos líneas de código, vería en un cuadro de texto el resultado de la expresión.

 

Evaluación de expresiones:

Esta clase cuenta con 6 métodos y 6 propiedades para poder llevar a buen fin la evaluación de la expresión y la manipulación de variables. Permite, a su vez, ejecutar expresiones que incluyan exponenciación (^), multiplicación (*), división (/), suma (+) y resta (-). Existe una jerarquía de operadores, esta jerarquía se aplica de izquierda a derecha. Primero se evalúan aquellos valores potenciados (^), luego (De izquierda a derecha) los multiplicados y divididos (El que se encuentre primero) y finalmente las sumas y restas (Igual al anterior).

Es decir, si se proporciona una expresión como la siguiente:

objEvalua.CadEvaluar = "5 + 3 * 8"

El resultado sería 29 y no 64, dado que primero se ejecuta la multiplicación (3 * 8 = 24) y el resultado lo suma a 5 (5 + 24 = 29). Si desea que ciertas partes de la expresión sean evaluadas antes, debe encerrarlas entre paréntesis. En el ejemplo anterior, para obtener 64 la fórmula sería:

objEvalua.CadEvaluar = "(5 + 3) * 8"

El siguiente ejemplo también es válido:

objEvalua.CadEvaluar = "(5 + (4 - 1)) * 8"

De este modo, se están anidando paréntesis en la expresión. Así se ejecutaría inicialmente la expresión entre los paréntesis mas internos, para luego continuar con lo demás.

 

Uso de Variables:

Esta clase puede utilizar variables en las expresiones. Para el caso, deberán proporcionarse los valores de cada variable para poder llevar a cabo el proceso. Podría necesitar una expresión como la que sigue:

objEvalua.CadEvaluar = "(a^2) + (2*(a*b)) + (b^2)"

Nótese que los nombres de las variables deben iniciar con una letra y pueden continuar con más letras, números o guiones bajos o una combinación de todos. No utilice caracteres acentuados, especiales o ñ para los nombres de variables. Procure no utilizar nombres de variables de más de 256 caracteres. Aunque puede poner los nombres tan largos como quiera, es un hecho que un nombre muy largo de variable puede provocar errores al teclearse.

Los siguientes son nombres válidos de variables:

x

Valor1

CALCULO12423423534

Meta_Idustrial

Calculo_estadistico_

(Los nombres de variables no son sensibles a mayúsculas y minúsculas. Por lo tanto es indistinto hacer referencia a una variable como Valor1, VALOR1, vAlOr1, etc.)

Los siguientes no son nombres válidos de variables:

10x

Validacion.de.datos

Cálculo

Año_&_Mes

 

El valor predeterminado de las variables es Vacío (Empty). Para poder hacer uso de la variable debe asignarle un valor. El siguiente sería un ejemplo programático de hacerlo (Suponiendo que a=6 y b=15):

objEvalua.NuevoValor "a", 6

objEvalua.NuevoValor "b", 15

 

Si supiéramos que la variable a es la 1 y la b es la 2, puede asignar los valores como sigue:

objEvalua.NuevoValor 1, 6

objEvalua.NuevoValor 2, 15

 

De este modo, es indistinto dirigirse a la variable por cualquiera de los dos métodos. Al ejecutar el análisis de la expresión, el resultado deberá ser 441.

El valor por asignar a la variable debe ser numérico o Empty. Puede utilizar el método NuevoValor cuantas veces lo requiera para cambiar los valores a las variables.

Para saber el valor que tiene una determinada variable, utilice el método Valor, como en el siguiente ejemplo:

If IsEmpty(objEvalua.Valor("a")) Then
    MsgBox "La variable a está Vacía"
Else
    MsgBox "El valor de la variable a es: " & objEvalua.Valor("a")
End If

 

El método Valor devuelve un Variant que puede ser Empty o cualquier otro valor numérico que se le haya asignado a la variable de marras.

 

Agregar y Eliminar variables:

Puede agregar las variables de dos maneras:

Una de ellas, es dejar que el objeto analice la cadena para encontrar las variables inmiscuidas. De forma automática le dirá cuantas variables hay. Para hacer eso, use el método ObtieneVar.

objEvalua.CadEvaluar = "(a^2) + (2*(a*b)) + (b^2)"

objEvalua.ObtieneVar

Después de este paso, el objeto ya sabe que hay dos variables: a y b. Para saber cuantas variables encontró el objeto, utilice la propiedad de sólo lectura CuentaVar:

MsgBox "Existen " & objEvalua.CuentaVar & " variables en la memoria."

La segunda manera de hacerlo, es con el método NuevaVar. Este método se utiliza como en el siguiente ejemplo:

objEvalua.NuevaVar "MiVariable"

De este modo, se agregará una nueva variable con un valor inicial Empty a la memoria. Puede indicarse el valor predeterminado de la variable al añadirse tal valor cuando se ejecuta el método NuevaVar, como en el siguiente ejemplo:

objEvalua.NuevaVar "MiVariable", 100

El valor tiene que ser numérico o Empty. Procure asegurarse de esto.

Las variables son persistentes. Esto quiere decir que se conservarán los nombres y valores de variables proporcionadas durante toda la vida del objeto. Esto, por supuesto, puede redundar en un desperdicio de recursos. Sin embargo, puede eliminar variables mediante dos métodos: RemVar y LimpiaVar.

Con RemVar se pueden eliminar variables expresas. Es decir, si ya no se necesita la variable "a", puede ejecutarse el siguiente código:

objEvalua.RemVar "a"

LimpiaVar es más radical. Eliminará todas las variables de la memoria. El siguiente ejemplo:

objEvalua.LimpiaVar

hará que todas las variables que existan sean eliminadas de la memoria.

 

Una nota final

Esta clase se entrega "como está" y no me hago responsable por ningún error o daño causado directa o indirectamente por ella. Si se alterará a modo de mejorar sus capacidades, por favor inclúyase el presente documento y déjeseme el crédito correspondiente. He trabajado varias horas en esto y creo que me merezco un crédito por ello.

Cualquier duda, recomendación o reporte de error, hágase llegar a mi dirección de correo electrónico:

A. David Garza Marín
adgarza@spin.com.mx

o por vía telefónica al (52) (5) 693-6658

Agradezco infinitamente a Marco A. Pérez López y Guillermo la ayuda prestada durante el proceso de creación de esta clase.


 

Resumen de Propiedades y Métodos de la clase clsEvalua:

 

AnalizaFormula (Método)

Lleva a cabo el análisis de la fórmula que se haya asignado con la propiedad CadEvaluar:

Sintaxis:

<objeto>.AnalizaFormula

Ejemplo:

MiObjeto.AnalizaFormula

Nota:

Asegúrese que haya asignado la cadena por analizar con la propiedad CadEvaluar.

Vea También:

CadEvaluar.

 

CadEvaluar (Propiedad)

Asigna la cadena que contiene una fórmuna matemática por evaluar. Esta cadena debe tener operaciones como potenciación, multiplicación, división, suma y resta. Puede incluir variables.

Sintaxis:

<objeto>.CadEvaluar = <Valor-de-cadena>

<Variable> = <objeto>.CadEvaluar

Ejemplo:

MiObjeto.CadEvaluar = "5 * 7 + (a / c)"

Notas:

Puede asignar u obtener el valor de la cadena asignada para evaluar con esta propiedad. Puede asignar cuantas veces lo desee esta propiedad.

Vea también:

AnalizaFormula

 

CErr (Propiedad)

Propiedad de sólo lectura que devuelve el código de error ocurrido.

Sintaxis:

<Variable> = <objeto>.CErr

Ejemplo:

IError = MiObjeto.CErr

Notas:

Los códigos de error devueltos son los siguientes:

0 (La operación se realizó con éxito)

1 (No se aceptan caracteres especiales, acentuados o ñ)

2 (La variable indicada no existe)

3 (Sólo se aceptan valores numéricos o Empty)

4 (Hay variables sin inicializar)

5 (No se ha asignado una expresión por evaluar)

6 (Falta, al menos, un cierre de paréntesis)

7 (La variable indicada ya existe)

8 (No se puede dividir entre cero)

 

Vea también:

DErr

 

CuentaVar (Propiedad)

Propiedad de sólo lectura que devuelve la cantidad de variables que están en memoria.

Sintaxis:

<Variable> = <objeto>.CuentaVar

Ejemplo:

IVariables = MiObjeto.CuentaVar

Notas:

Esta propiedad es de sólo lectura. Cualquier intento por escribir en ella redundará en un error.

 

DErr (Propiedad)

Propiedad de sólo lectura que devuelve el texto del código de error ocurrido.

Sintaxis:

<Variable> = <objeto>.DErr

Ejemplo:

strError = MiObjeto.DErr

Notas:

Los códigos de error devueltos son los siguientes:

0 (La operación se realizó con éxito)

1 (No se aceptan caracteres especiales, acentuados o ñ)

2 (La variable indicada no existe)

3 (Sólo se aceptan valores numéricos o Empty)

4 (Hay variables sin inicializar)

5 (No se ha asignado una expresión por evaluar)

6 (Falta, al menos, un cierre de paréntesis)

7 (La variable indicada ya existe)

8 (No se puede dividir entre cero)

Vea también:

CErr

 

LimpiaVar (Método)

Elimina de la memoria todas las variables que se encuentren allí.

Sintaxis:

<objeto>.LimpiaVar

Ejemplo:

MiObjeto.LimpiaVar

Notas:

Una vez que las variables son removidas de la memoria, no hay manera de recuperarlas, o a sus valores.

Vea también:

RemVar

 

NombreVar (Propiedad)

Devuelve el nombre de la variable que se encuentra en la posición indicada.

Sintaxis:

<variable> = <objeto>.NombreVar(<posición>)

Ejemplo:

CualVariable = MiObjeto.NombreVar(1)

Notas:

Posición es un valor que se encuentra entre 1 y CuentaVar. Si CuentaVar tiene un valor de Cero, cualquier intento por utilizar esta propiedad redundará en un error.

 

NuevaVar (Método)

Agrega una nueva variable al conjunto de variables almacenados en la memoria.

Sintaxis:

<objeto>.NuevaVar <nombre_de_variable> [, Valor [, Silencio]]

Donde:

nombre_de_variable es una cadena que contiene el nombre que identificará a la variable

Valor es un argumento opcional que permite asignar un número predeterminado a la variable. Valor puede ser cualquier número o Empty (Su valor predeterminado). Este valor se utilizará cuando se hagan asignaciones incorrectas a la variable de modo que pueda prever el valor de la variable en cualquier intancia.

Silencio es un argumento opcional que le indica al procedimiento que muestre o no mensajes si el nombre de la variable es incorrecto. Si el valor es True, no se mostrarán los mensajes, si es False (Predeterminado) los mensajes serán mostrados.

Ejemplo:

MiObjeto.NuevaVar "MiVariable", 20

Notas:

El nombre de la variable debe empezar con una letra y, en seguida, puede tener otras letras, números o guiones bajos. Puede tener tantos caracteres como necesite. No incluya caracteres acentuados, especiales o eñes. El valor predeterminado de cualquier variable asignada es Empty. Si se asigna cualquier valor numérico como predeterminado, este será el valor que tenga la variable al menos. Es decir, si se ejecuta una asignación de valor errónea, la variable tomará su valor predeterminado (Asignado aquí).

Vea también:

NuevoValor

 

NuevoValor (Método)

Asigna un nuevo valor a la variable indicada.

Sintaxis:

<objeto>.NuevoValor <nombre_de_variable> [, Valor]

Donde:

nombre_de_variable es una cadena que contiene el nombre que identifica a la variable a la que se le asignará un nuevo valor.

Valor es un argumento opcional que permite cambiar la asignación a la variable. Valor puede ser cualquier número o Empty. Si no se incluye, la variable tomará su valor predeterminado (Establecido con el método NuevaVar).

Ejemplo:

MiObjeto.NuevoValor "MiVariable", 50

Notas:

Si la variable indicada no existe, se obtiene un error. Si el valor asignado no es correcto, la variable tomará su valor predeterminado (El mismo que se asignó con el método NuevaVar).

Vea también:

NuevaVar

 

ObtieneVar (Método)

Analiza la expresión que se evaluará y obtendrá las variables incluidas allí.

Sintaxis:

<objeto>.ObtieneVar

Ejemplo:

MiObjeto.ObtieneVar

Notas:

Si no hay variables o no se ha asignado una cadena por evaluar con la propiedad CadEvaluar, ObtieneVar devolverá 0 en la propiedad CuentaVar (O el mismo número de variables que ya existían en la memoria). Si en la expresión hay nombres de variables con caracteres inadecuados, se aborta todo el proceso de obtención de variables.

Vea también:

CuentaVar

 

RemVar (Método)

Remueve la variable indicada.

Sintaxis:

<objeto>.RemVar <nombre-de-variable>

Donde

nombre-de-variable es el nombre o número de variable que se desea eliminar

Ejemplo:

MiObjeto.RemVar "MiVariable"

Notas:

Si la variable que se desea eliminar no existe, obtendrá un error.

Vea también:

LimpiaVar

 

Valor (Propiedad)

Devuelve el valor de la variable indicada.

Sintaxis:

<variable> = <objeto>.Valor(<nombre-de-variable>)

Donde:

variable es alguna entidad a la que se asignará el valor obtenido.

nombre-de-variable es el identificador o número de variable del que se quiere obtener el valor.

Ejemplo:

ElValor = MiObjeto.Valor("MiVariable")

Notas:

Si no existe la variable

ObtieneVar

Vea también:

CuentaVar


ir al índice

 Pulsa este link para el código de ejemplo (csEvalua.zip 20.9 KB)