Arithmetic-Logic Expression eValuator (ALEV)1.5
Manual de Referencia
1.5VMC-Mxx
Arithmetic-Logic Expression eValuator (ALEV)1.5 Manual de Referencia
El software descrito en este documento se distribuye bajo un contracto de licencia y puede utilizarse
únicamente de acuerdo a los términos de uso de dicho acuerdo.
Aviso de Copyright
Copyright © 2013 Tango/04. Todos los derechos reservados.
Fecha de documento: Enero 2013
Versión de documento: 2.12
Versión de producto: 1.5
Ninguna parte de esta publicación puede reproducirse, transmitirse, transcribirse, almacenarse en un
sistema de recuperación o traducirse a ningún idioma o lenguaje de programación, de ninguna forma ni
medio, electrónico, mecánico, magnético, óptico, químico, manual, o de cualquier otro tipo, sin el
permiso por escrito previo de Tango/04.
Marcas Registradas
Cualquier referencia a nombres de productos registrados son propiedad de las respectivas empresas.
Soporte Técnico
Para soporte técnico visite nuestra página web en www.tango04.com.
Tango/04 Computing Group S.L.
Avda. Meridiana 358, 5 A-B
Barcelona 08027
España
Teléfono: +34 93 274 0051
Tabla de Contenidos
Tabla de Contenidos
Tabla de Contenidos.......................................................................... III
Cómo Usar esta Guía.......................................................................VIII
Capítulo 1
Introducción ...................................................................................... 11.1. Novedades en ALEV 1.5.................................................................................1
Capítulo 2
Elementos Sintácticos......................................................................... 22.1. Comentarios....................................................................................................2
2.2. Identificadores.................................................................................................2
2.3. Palabras Reservadas .....................................................................................3
Capítulo 3
Expresiones ....................................................................................... 43.1. Operadores .....................................................................................................5
3.1.1. Operador de Asignación (:=).....................................................................5
3.1.2. Operador de Indexación ( [ ] ) ...................................................................5
3.1.3. Operadores Relacionales ( =, <>, <, <=, >, >=, IN, LIKE, MATCH) ..........6
3.1.4. Operadores Lógicos ( AND, OR, XOR, NOT ) ..........................................8
3.1.5. Operadores Aritméticos ( +, -, *, /, DIV, MOD, ^, % ) ................................8
3.2. Tipos de Datos..............................................................................................10
3.2.1. Tipos de Datos Básicos ..........................................................................10
© 2013 Tango/04 Computing Group Página III
Tabla de Contenidos
3.2.2. Tipos de Datos Complejos ......................................................................10
3.3. Variables .......................................................................................................11
Capítulo 4
Declaraciones .................................................................................. 124.1. Constantes ..................................................................................................12
4.1.1. Constantes Predefinidas .........................................................................12
4.2. Variables Temporales ...................................................................................13
4.3. Variables Estáticas .......................................................................................13
Capítulo 5
Sentencias ...................................................................................... 145.1. Sentencias Simples ......................................................................................14
5.1.1. Sentencias de asignación .......................................................................14
5.1.2. Llamadas de procedimiento y función ....................................................15
5.2. Sentencias estructuradas .............................................................................15
5.2.1. Sentencias compuestas: Sentencias Begin…End..................................15
5.2.2. Sentencias Condicionales: Sentencias If ...............................................15
5.2.3. Sentencias Bucle: Sentencias Repeat, While y For ...............................16
5.2.4. Sentencias de Interrupción de Secuencias: Sentencias Break, Continue y Exit .............................................................................................................18
Capítulo 6
Patrones y Expresiones Regulares ...................................................... 196.1. Patrones........................................................................................................19
6.2. Expresiones Regulares.................................................................................20
Capítulo 7
Tipo de Datos SET............................................................................ 227.1. Declaración de SETs ....................................................................................22
7.2. Operaciones sobre SETs..............................................................................23
7.3. Utilización de SETs.......................................................................................23
Capítulo 8
Tipo de Datos ARRAY........................................................................ 25
© 2013 Tango/04 Computing Group Página IV
Tabla de Contenidos
8.1. Declaración de ARRAYs...............................................................................25
8.2. Operaciones sobre ARRAYs ........................................................................26
8.3. Utilización de ARRAYs .................................................................................27
Apéndices
Apéndice A: Funciones en ALEV Script v1.5 ........................................ 28A.1. Categorías de Funciones .............................................................................28
A.2. Funciones de Tratamiento de Arrays ...........................................................28
A.2.1. FIND .....................................................................................................28
A.2.2. INDEXOF ...............................................................................................29
A.2.3. KEYAT ..................................................................................................29
A.2.4. KEYOF ...................................................................................................29
A.2.5. SIZEOF ..................................................................................................29
A.2.6. APPEND ...............................................................................................30
A.2.7. DELETE .................................................................................................30
A.2.8. INSERT .................................................................................................30
A.3. Funciones de Tratamiento de Fecha y Hora ................................................30
A.3.1. DATE (Funciones de Tratamiento de Fecha y Hora) ............................31
A.3.2. DAY .......................................................................................................31
A.3.3. DAYNAME .............................................................................................31
A.3.4. DAYOFWEEK ........................................................................................32
A.3.5. HOUR ....................................................................................................32
A.3.6. MINUTE .................................................................................................32
A.3.7. MONTH ..................................................................................................33
A.3.8. MONTHNAME .......................................................................................33
A.3.9. NOW ......................................................................................................33
A.3.10. SECOND .............................................................................................33
A.3.11. TIME ....................................................................................................34
A.3.12. WEEKOFMONTH ................................................................................34
A.3.13. WEEKOFYEAR ...................................................................................34
A.3.14. YEAR ...................................................................................................34
A.4. Funciones Lógicas........................................................................................35
A.4.1. IIF ...........................................................................................................35
A.4.2. SELECT .................................................................................................35
A.5. Funciones Aritméticas ..................................................................................35
A.5.1. ABS ........................................................................................................36
A.5.2. ARCCOS ...............................................................................................36
A.5.3. ARCSIN .................................................................................................36
A.5.4. ARCTAN ................................................................................................36
A.5.5. COS .......................................................................................................36
A.5.6. EXP ........................................................................................................37
A.5.7. FRAC .....................................................................................................37
A.5.8. LN ..........................................................................................................37
A.5.9. POW ......................................................................................................37
A.5.10. RANDOM .............................................................................................37
A.5.11. ROUND ................................................................................................38
A.5.12. SIN .......................................................................................................38
© 2013 Tango/04 Computing Group Página V
Tabla de Contenidos
A.5.13. SQRT ...................................................................................................38
A.5.14. TAN ......................................................................................................38
A.6. Funciones Estadísticas ................................................................................39
A.6.1. AVERAGE ............................................................................................39
A.6.2. MAX .......................................................................................................39
A.6.3. MIN ........................................................................................................39
A.6.4. VARIANCE ...........................................................................................39
A.7. Funciones de Tratamiento de Strings...........................................................40
A.7.1. COPY .....................................................................................................40
A.7.2. DELETE .................................................................................................41
A.7.3. FORMAT ...............................................................................................41
A.7.4. HEAD .....................................................................................................41
A.7.5. LEN .......................................................................................................41
A.7.6. LENGTH ................................................................................................41
A.7.7. LOCATE ................................................................................................42
A.7.8. LOWER .................................................................................................42
A.7.9. LOWERCASE ........................................................................................42
A.7.10. LTRIM ..................................................................................................42
A.7.11. POS .....................................................................................................42
A.7.12. POSITION ...........................................................................................43
A.7.13. REPLACE ............................................................................................43
A.7.14. REVERSE ............................................................................................43
A.7.15. RTRIM .................................................................................................43
A.7.16. SUBS ..................................................................................................43
A.7.17. SUBSTRING .......................................................................................44
A.7.18. TAIL .....................................................................................................44
A.7.19. TRIM ....................................................................................................44
A.7.20. UPPER ...............................................................................................44
A.7.21. UPPERCASE .......................................................................................45
A.8. Funciones de Conversión de Tipo................................................................45
A.8.1. BOOLEAN .............................................................................................45
A.8.2. DATE .....................................................................................................45
A.8.3. DATETIME .............................................................................................45
A.8.4. INTEGER ...............................................................................................46
A.8.5. REAL .....................................................................................................46
A.8.6. REG ......................................................................................................46
A.8.7. REGEXP ...............................................................................................46
A.8.8. STRING .................................................................................................46
A.8.9. TIME ......................................................................................................46
A.9. Funciones de Información de Entorno..........................................................47
A.9.1. ASSIGNED ...........................................................................................47
A.9.2. DEFINED ...............................................................................................47
A.9.3. EXIST ....................................................................................................47
A.9.4. ISBLANK ................................................................................................48
A.9.5. ISNULL .................................................................................................48
A.9.6. ISNUM ...................................................................................................48
A.9.7. ISZERO .................................................................................................48
A.9.8. TYPENAME ...........................................................................................49
© 2013 Tango/04 Computing Group Página VI
Tabla de Contenidos
Apéndice B: Sintáxis......................................................................... 50
Apéndice C: Contactar con Tango/04 ................................................. 52
Acerca de Tango/04 Computing Group ............................................... 54
Aviso Legal...................................................................................... 55
© 2013 Tango/04 Computing Group Página VII
Cómo Usar esta Guía
© 2013 Tango/04 Computing Group Página VIII
Cómo Usar esta Guía
Este capítulo explica cómo usar las Guías de Usuario de Tango/04 y comprender las convenciones
tipográficas usadas en toda la documentación de Tango/04.
Convenciones Tipográficas
Los siguientes términos, formatos de texto y símbolos convencionales se utilizan en toda la
documentación impresa de Tango/04:
Convention Description
Negrita Mandatos, botones en pantalla y opciones de menú.
Cursiva azul Referencias y enlaces a otras secciones en el manual o a otra documentación que contiene información relevante.
Cursiva Texto mostrado en pantalla, o variables donde el usuario debe sustituir sus propios detalles.
Monospacia Mandatos de entrada como mandatos o código System i, o texto que los usuarios deben teclear.
MAYUSCULA Claves de teclado, como CTRL para la tecla Control y F5 para la tecla de función que está etiquetada como F5.
Notas e información adicional de utilidad.
Consejos y pistas que mejoran la experiencia de usuario al trabajar con este producto.
Importante: información adicional que es altamente recomendable que el usuario tenga en cuenta.
Aviso: El no seguir esta información podría derivar potencialmente en serios problemas.
Introducción
© 2013 Tango/04 Computing Group Página 1
Capítulo 11 Introducción
ALEV es un lenguaje que se utiliza para expresar condiciones y/o cálculos. Básicamente, es el mismo
lenguaje utilizado en álgebra matemática. A pesar de que usted no lo conozca con éste nombre,
probablemente ya lo conoce y lo ha utilizado. Es muy similar al que se utiliza en programas de hoja de
cálculo, o en SQL en las cláusulas WHERE.
ALEV le permite trabajar con Variables, a las que pueda asignar valores, y que pueden ser utilizadas en
las expresiones para hacer referencia a dichos valores.
Además, ALEV ofrece un amplio conjunto de Funciones Predefinidas, que usted puede utilizar en
cualquier expresión. Diríjase al Apéndice A: Funciones en ALEV Script v1.5 en página 28 para más
información.
1.1 Novedades en ALEV 1.5ALEV Script. ALEV 1.5 incorpora funcionalidades de scripting – es decir, la capacidad de incluir lógica
de procesamiento en los cálculos. Esta lógica de procesamiento está disponible en forma de
Sentencias Estructuradas. Diríjase al Apéndice A: Funciones en ALEV Script v1.5 en página 28 para
más detalles.
Nuevas funciones ALEV. En la versión 1.5 encontrará nuevas funciones entre las cuales FIND,
KEYAT, APPEND, INSERT, AVERAGE, VARIANCE, y FORMAT. También encontrara alias para
funciones existentes, haciendo más fácil que nunca escribir sentencias ALEV.
Incremento del rendimiento en un 200%. Por último, pero no menos importante, notará una
importantísima mejora en el rendimiento cuando ejecute sentencias ALEV.
Elementos Sintácticos
Capítulo 2 2 Elementos Sintácticos
Elementos sintácticos fundamentales, llamados tokens, se combinan para formar expresiones,
declaraciones, y sentencias:
• Una sentencia describe una acción algorítmica que puede ser ejecutadas en un script.
• Una expresión es una unidad sintáctica que se produce en una sentencia y denota un valor.
• Una declaración define un identificador (cómo el nombre de una variable) que puede ser
utilizado en expresiones y sentencias.
2.1 ComentariosPuede incluir comentarios en sus scripts para explicar, en lenguaje natural, qué hace el script. Los
comentarios se definen como texto enmarcado por /* y */. Por ejemplo:
/* Esto es un comentario */
Además, el resto del texto en una línea puede ser comentado utilizando // al principio del comentarios.
Por ejemplo:
1 + 2; // Esto es un comentario
2.2 IdentificadoresLos identificadores denotan constantes, variables, tipos, procedimientos y funciones
Un identificador debe comenzar con una letra, un guión bajo “_”, un ampersand “&” o una arroba “@”, y
espacios, letras, dígitos, subrayados, ampersands, arrobas (@), tanto por cientos (%) no se permiten
después del primer carácter.
Las palabras reservadas no pueden ser utilizadas como identificadores.
© 2013 Tango/04 Computing Group Página 2
Elementos Sintácticos
2.3 Palabras Reservadas Las siguientes palabras reservadas no pueden redefinirse o usarse como identificadores.
AND ANY ARRAY BEGIN BOOL
BOOLEAN BREAK CONST CONTINUE DATE
DATETIME DIV DO DOWNTO ELSE
END EXIT FOR FUNCTION IF
IN INTEGER LIKE MATCH MOD
NOT OR PROCEDURE REAL REGEXP
REPEAT SET STATIC STEP STRING
THEN TIME TO UNTIL USERDEF
VAR VARIANT VOID WHILE XOR
© 2013 Tango/04 Computing Group Página 3
Expresiones
Capítulo 3 3 Expresiones
Una expresión es una construcción que retorna un valor. Por ejemplo,
X// variable
15 // entero constante
Result // variable
Compute(X,Y) // función de llamada
X * Y // producto de X por Y
Z / (1 ‐ Z) // cociente de Z entre (1 ‐ Z)
X = 1.5 // Boleano
C in {1..10} // Boleano
not Done // negación de un Boleano
['a','b','c'] // vector
String(48) // entero constante 48 convertido a valor de cadena
Las expresiones más simples son variables y constantes. Expresiones más complejas se construyen
desde otras más simples utilizando operadores y llamadas a funciones.
Puede utilizar paréntesis ( y ) para indicar la prioridad de operaciones y el orden en que se ejecutan. No
hay límite en la utilización de paréntesis o niveles de reproducción.
Dependiendo del resultado para una expresión se puede distinguir entre:
Expresiones Lógicas: Expresiones que calculan una condición lógica y retornan un valor lógico
(BOOLEAN).
En expresiones lógicas puede utilizar operadores lógicos (AND, OR, XOR, NOT), operadores
relacionales (=, <>, <, <=, >, >=, IN, LIKE y MATCH), y cualquier función que retorne un valor
BOOLEAN. Diríjase a Operadores en la página 8 para más detalles. Por ejemplo, las siguientes son
expresiones lógicas:
• A > B
• (A > B) AND ( B > C )
• ((A >= B) AND (C <= B)) OR ((A < 1024) AND (B < 1024))
• NOT ( C < D )
© 2013 Tango/04 Computing Group Página 4
Expresiones
• A LIKE "CPF*"
Expresiones Aritméticas: expresiones que tienen un valor no-lógico: numérico (INTEGER o REAL),
cadena, hora ( TIME ), fecha ( DATE ),...
En expresiones aritméticas puede utilizar operadores aritméticos ( +, -, *, /, ^, DIV y MOD ) y cualquier
función predefinida. Por ejemplo, las siguientes son expresiones aritméticas:
• Buenos Días,' + UserName
• ( Use / 24 ) * 100
3.1 OperadoresLos Operadores son los que permiten hacer operaciones con los datos. Los datos a los que se aplican
los operadores se denominan Operando. Un Operando puede ser una constante, una variable, o el
resultado de una expresión.
Los distintos Operadores se agrupan en categorías, según el tipo de operación que realizan:
• Operador de Asignación : :=
• Operador de Indexación : [ ]
• Operadores Relacionales : =, <>, <, <=, >, >=, IN, LIKE y MATCH
• Operadores Lógicos : AND, OR, XOR y NOT
• Operadores Aritméticos : +, -, *, /, DIV, MOD, ^ y %
3.1.1 Operador de Asignación (:=)Utilización: <Variable> := <Expresión>
Descripción: El operador de asignación le permite asignar valores a variables. Las variables pueden
ser de cualquier tipo, incluyendo elementos de un ARRAY. Si se trata de elementos de un ARRAY, no
tienen porqué estar previamente definidos. La variable a la que se asigna no tiene porqué ser del
mismo tipo que el resultado de la expresión. Una vez realizada la asignación, la variable tomará el tipo
del resultado de la expresión.
3.1.2 Operador de Indexación ( [ ] )Utilización: <Variable>[<Operando>]
Descripción: El operador de indexación le permite acceder a los elementos de un ARRAY, o a los
caracteres de un STRING:
• Si <Variable> es de tipo ARRAY, <Operando> puede ser de tipo INTEGER para acceder a los
elementos del ARRAY por su posición en el mismo, o puede ser de cualquier otro tipo para
acceder a los elementos del ARRAY por clave (siempre y cuando, tengan clave). El resultado
del operador es el elemento que ocupa la posición o la clave indicada.
• Si <Variable> es de tipo STRING, entonces, <Operando> ha de ser, forzosamente, de tipo
INTEGER. Sólo se puede acceder a los caracteres de un STRING por su posición.
© 2013 Tango/04 Computing Group Página 5
Expresiones
3.1.3 Operadores Relacionales ( =, <>, <, <=, >, >=, IN, LIKE, MATCH)Utilización:
• <Operando 1> = <Operando 2>
• <Operando 1> <> <Operando 2>
• <Operando 1> < <Operando 2>
• <Operando 1> <= <Operando 2>
• <Operando 1> > <Operando 2>
• <Operando 1> >= <Operando 2>
• <Operando 1> IN <Operando 2>
• <Operando 1> LIKE <Operando 2>
• <Operando 1> MATCH <Operando 2>
Descripción: Los operadores relacionales comprueban relaciones entre operandos, devolviendo
siempre un resultado de tipo BOOLEAN, que nos informa de si se cumple la relación especificada o no.
Se definen como sigue:
• =: Igual a
• <>: Diferente de
• <: Menor que
• <=: Menor o igual que
• >: Mayor que
• >=: Mayor o igual que
• IN: Pertenece a
• LIKE: Parecido a
• MATCH: Sustituye a
Los operadores =, <> operan con operandos de cualquier tipo, exceptuando el tipo ARRAY.
Los operadores <, <=, > y >= operan con operandos de cualquier tipo, exceptuando los tipo SET y
ARRAY.
El operador IN, requiere que el Operando 2 sea de los tipos SET o ARRAY. El Operando 1 puede ser de
cualquier tipo, exceptuando el tipo ARRAY.
Los operadores LIKE y MATCH requieren que Operando 1 y Operando 2 sean de tipo STRING. En
cualquier caso, consulte el tema dedicado a LIKE y MATCH, donde se describe con detalle el
funcionamiento de ambos, así como las muchas posibilidades que proporcionan.
LIKE y MATCH
Utilización:
• <Operando 1> LIKE <Operando 2>
• <Operando 1> MATCH <Operando 2>
© 2013 Tango/04 Computing Group Página 6
Expresiones
Descripción: El operador relacional LIKE es muy similar al que se utiliza en SQL estándar: Permite
comparar STRINGS de una forma menos estricta que los operadores de igualdad ( = ) y de diferencia (
<> ). Por ejemplo, sean los siguientes STRINGS:
S1 := "Error en tabla CLIENTES.DBF: No hay suficiente espacio en disco."
S2 := "Error en tabla PRODUCTOS.DBF: Se ha violado la integridad referencial."
Si bien es verdad que los dos cadenas no son iguales, si es cierto que 'se parecen'. Se parecen en el
sentido de que siguen un mismo patrón: ambas empiezan con "Error en tabla ", a continuación hay un
'parámetro', sigue el carácter ":", y por último hay una descripción del error.
Estas similitudes entre STRINGS se expresan en forma de Patrones, a los que se dedica la sección
Patrones. Seguramente ya conoce los patrones, ya que son una herramienta muy utilizada en todos los
sistemas operativos. A modo de ejemplo, el patrón que definiría las similitudes entre S1 y S2 seria
"Error en tabla *: *".
El operador LIKE le permite comprobar si un STRING, <Operando 1>, se ajusta al patrón descrito por el
STRING <Operando 2>. LIKE devuelve un valor de tipo BOOLEANO:
• Si <Operando 1> "se parece" a <Operando 2>, devuelve TRUE.
• Si "no se parece", devuelve FALSE. Así, en el ejemplo anterior, tendríamos:
S1 LIKE "Error en tabla *: *" = TRUE
S1 LIKE "Error de sistema: *' = FALSE
Una vez visto el operador LIKE, suponga usted que define una condición de alarma en la aplicación
basándose en la siguiente expresión:
MENSAJE LIKE "Error en tabla *: *"
Es decir, cuando la expresión anterior devuelva TRUE, se disparará una acción correctiva, o se le
informará de que se ha detectado una condición anómala. Pero seguramente, la acción correctiva
necesitará saber en que tabla se debe de ejecutar, o el mensaje informativo deberá indicar en que tabla
se produce el error,...es decir, usted necesitaría "extraer" el nombre de la tabla que aparece en
MENSAJE.
El operador MATCH le permite hacer la extracción de una forma muy sencilla. Veámoslo con el
siguiente ejemplo:
MENSAJE MATCH "Error en tabla %NOMBRE_TABLA%: %TEXTO_ERROR%"
Fíjese como se parece a la sentencia LIKE anterior: Sólo hemos modificado un poco el patrón, hemos
substituido los comodines ' * ', por nombres de variables delimitados por el carácter %.
En estos momentos, usted ya se debe de hacer una idea de como funciona el operador MATCH:
• Si el STRING <Operando 1> "se parece" al patrón <Operando 2>, entonces, asigna las
variables indicadas en el patrón con las correspondientes substituciones que aparecen en el
STRING, y devuelve TRUE.
• Si <Operando 1> "no se parece" al patrón <Operando 2>, no asigna las variables y devuelve
FALSE.
Consejo
Puede utilizar las funciones REG o REGEXP en <Operand 2> si necesita utilizar expresiones
regulares para realizar operaciones LIKE/MATCH complejas.
© 2013 Tango/04 Computing Group Página 7
Expresiones
3.1.4 Operadores Lógicos ( AND, OR, XOR, NOT )Utilización:
• NOT <Operando>
• <Operando 1> AND <Operando 2>
• <Operando 1> OR <Operando 2>
• <Operando 1> XOR <Operando 2>
Descripción: Los operadores lógicos se aplican solamente a operandos de tipo BOOLEAN. Se
definen como sigue:
• NOT: Negación. El valor boleano del Operando negado.
• AND: Y lógica. TRUE cuando ambos operandos son TRUE, FALSE en caso contrario.
• OR: O lógica. TRUE cuando al menos uno de los operandos es TRUE, FALSE en caso
contrario.
• XOR: O exclusiva. TRUE cuando sólo uno de los operandos es TRUE, FALSE en caso
contrario.
Las siguientes tablas definen el comportamiento de los operadores.
3.1.5 Operadores Aritméticos ( +, -, *, /, DIV, MOD, ^, % )Utilización:
• <Operando 1> + <Operando 2>
• <Operando 1> - <Operando 2>
• <Operando 1> * <Operando 2>
© 2013 Tango/04 Computing Group Página 8
Expresiones
• <Operando 1> / <Operando 2>
• <Operando 1> DIV <Operando 2>
• <Operando 1> MOD <Operando 2>
• <Operando 1> ^ <Operando 2>
• <Operando 1> % <Operando 2>
Descripción: Los operadores aritméticos pueden aplicarse a distintos tipos de operandos. En función
de los tipos de los operandos, tenemos:
• Aritmética Numérica: Cuando los operandos son de tipos numéricos ( INTEGER o REAL ).
En este caso, los operadores aritméticos se definen como:
+: Suma
-: Resta
*: Multiplicación
/: División
DIV: División entera
MOD: Resto de la división entera
^: Potencia
%: Porcentaje
• El resultado de la operación podrá ser de tipo INTEGER o REAL, dependiendo de la operación
y de los operandos.
• Aritmética de Fechas: Cuando al menos uno de los operandos es de los tipos TIME, DATE o
DATETIME. En este caso, sólo están definidos los operadores de suma (+) y resta (-).
• Si ambos operandos son de tipo DATE o DATETIME, el resultado será un número de tipo
REAL, indicando la suma o diferencia entre ambas fechas, expresada en días.
• Si ambos operandos son de tipo TIME, el resultado será de tipo TIME si no sobrepasa las 24
horas, y de tipo DATETIME si sobrepasa las 24 horas.
• Si uno de los operandos es de tipo DATE o DATETIME, y el otro es de tipo REAL, el operando
de tipo REAL se toma como una diferencia de días, y el resultado será de tipo DATE o
DATETIME.
Si uno de los operandos es de tipo TIME, y el otro es de tipo REAL, el operando de tipo
REAL se toma como una diferencia de días, y el resultado será de tipo TIME o DATETIME.
Concatenación de Cadenas de Texto: Si los operandos son de tipo STRING. En este caso,
sólo el operador de concatenación (+) está definido. El resultado será de tipo STRING, y
consistirá en la concatenación de <Operando 1> con <Operando 2>
• Aritmética de Conjuntos: Cuando al menos uno de los operandos es de tipo SET. En este
caso, los operadores aritméticos definidos son:
• +: Unión de Conjuntos. El resultado es el conjunto formado por los elementos de ambos
conjuntos.
• -: Diferencia de Conjuntos. El resultado es el conjunto formado por los elementos de
<Operando 1> que no se encuentran en <Operando 2>
• /: Intersección de Conjuntos. El resultado es el conjunto formado por los elementos de
<Operando 1> que también se encuentran en <Operando 2>
© 2013 Tango/04 Computing Group Página 9
Expresiones
• Si uno de los operandos no es de tipo SET, se interpreta como un conjunto con dicho operando
como único elemento. En cualquier caso, el resultado es siempre de tipo SET. Consulte la
Capítulo 7 - Tipo de Datos SET en página 22 para mas detalles al respecto.
3.2 Tipos de Datos
3.2.1 Tipos de Datos BásicosLas variables y las constantes, pueden ser de los siguientes Tipos de Datos Básicos:
3.2.2 Tipos de Datos ComplejosTambién se soportan los siguientes Tipos de Datos Complejos:
Tipo de datos
Descripción Ejemplos
BOOLEAN LógicoTRUE (verdadero),
FALSE (falso)
INTEGER Número entero. -10, -2, 0, 1, 3, 8
REALNúmero real.
Formatos: Punto fijo, Punto flotante
-8.4, 0.0, 1.5, 3.75
-5E-3, -4E2, 8E1, 4.2E3,
TIME
Hora
Delimitado por: #...#
Formatos: hora:minuto:segundo, AM/PM
#3:30:15#, #2:45#, #1:30 PM#, #2 AM#, #6 p#, #6:30 pm#, #7 a#
DATE
Fecha
Delimitado por: #...#
Formatos: día/mes/año
#2/2/1971#, #22/4/1975#
DATETIME
Hora
Delimitado por: #...#
Formatos: día/mes/año hora:minuto:segundo
#2/2/1971 23:50:45#
STRINGCadena de texto delimitado por: comi-lla simple o comilla doble
'Buenos dias'
"Buenas tardes"
VARIANT
ANY
El tipo para una variable no asignada, lo que significa que puede contener cualquier tipo de valor.
VOID
USERDEF Definido por la aplicación
Tipo de Datos
Descripción Ejemplos
SETIndicado por: {...}
{1,3,5,7},{1...10,20..30} {0.0..10.0} {'a'..'z', 'A'..'Z'} {#1/1/2002#...#30/6/2002#}{#9AM#..#2PM#,
#3PM#..#6:45pm#}
© 2013 Tango/04 Computing Group Página 10
Expresiones
Los tipos SET y ARRAY son mucho mas potentes que en cualquier otro lenguaje que implemente tipos
similares. Para ver una explicación detallada de las posibilidades que dichos tipos le ofrecen para
simplificar la escritura de expresiones, consulte Capítulo 7 - Tipo de Datos SET en página 22 y
Capítulo 8 - Tipo de Datos ARRAY en página 25.
3.3 VariablesHay tres clases de variables:
• Variables Locales: de cada expresión. Cuando esté escribiendo una expresión, puede definir
variables locales, variables que sólo serán visibles para dicha expresión, y que le servirán para
almacenar resultados temporales y hacer las expresiones más legibles.
• Variables Globales: a todas las expresiones. Si la aplicación le permite definirlas, usted podrá
utilizarlas en cualquiera de las expresiones, obteniendo su valor o modificándolo.
• Variables de Aplicación: Son similares a las Variables Globales, pero, aunque usted podrá
modificar su valor, generalmente será la aplicación la que le proporcione el valor.
ARRAYArrays o vecto-res indicados por: [...]
[1,2,3,4,5], ['a','b','c']
Tipo de Datos
Descripción Ejemplos
© 2013 Tango/04 Computing Group Página 11
Declaraciones
Capítulo 4 4 Declaraciones
En otros lenguajes similares, para declarar una variable es necesario especificar, de alguna forma, el
tipo de datos que almacenará dicha variable. En Scripts ALEV no es necesario definir el tipo de una
variable. Una variable puede cambiar el tipo de dato que está almacenando a lo largo de la “vida” de la
variable.
Puede declarar tres tipos de variables locales:
• Constantes,
• Temporales, y
• Estáticas.
4.1 Constantes Incluso cuando no hay variables reales (en el sentido que su valor se asigna en el momento de la
declaración y nunca cambia), puede utilizarse como otras variables en cada expresión que no cambia el
valor de la variable.
Las constantes se declaran utilizando la clave Const, y debe inicializarse – es decir, el valor para la
constante debe proporcionarse mediante una sentencia de asignación. Por ejemplo:
• Const SECONDS_PER_HOUR := 60 * 60;
4.1.1 Constantes PredefinidasAlgunas constantes útiles ya están predefinidas en ALEV Script:
• ALEV_VERSION: Un valor de cadena, que contiene la versión actual de ALEV Script.
• BLANK: Valor de cadena vacío.
• MAX_INTEGER: El valor INTEGER máximo.
• MAX_REAL: El valor REAL máximo.
• MIN_INTEGER: El valor INTEGER mínimo.
• MIN_REAL: El valor REAL mínimo.
• NULL: Valor no asignado.
• PI: Número Pi, 3.1415926….
© 2013 Tango/04 Computing Group Página 12
Declaraciones
4.2 Variables TemporalesLas variables locales se definen solo en el script donde se declara la variable, y sólo se definen donde
el script está siendo evaluado. Una vez el script ha sido evaluado, el valor de la variable es indefinido.
Las variables temporales se declaran utilizando la clave Var. Por ejemplo:
• Var i, j, k := 10; declara tres variables llamadas i, j y k, e inicializa k con el valor 10.
4.3 Variables EstáticasLas variable locales son similares a variables locales temporales, pero retienen su valor una vez el
script ha sido evaluado. Los valores de la variable estarán disponibles la próxima vez que se ejecute el
script. Las variables estáticas se declaran utilizando la clave Static. Por ejemplo:
• Static X, Y, Z;
© 2013 Tango/04 Computing Group Página 13
Sentencias
Capítulo 5 5 Sentencias
Las sentencias definen acciones algorítmicas en un script. Las sentencias simples – como
asignaciones y llamadas de procedimiento – pueden combinarse para formar bucles, sentencias
condicionales, y otras sentencias estructuradas.
Puntos y comas separan sentencias múltiples en un bloque.
5.1 Sentencias SimplesUna sentencia simple no contiene ninguna otra sentencia. Las sentencias simples incluyen
asignaciones y llamadas a procedimientos y funciones.
5.1.1 Sentencias de asignaciónUna sentencia de asignación tiene la siguiente forma:
• <variable> := <expresión>
donde variable es cualquier referencia a una variable, incluidas variables o componentes de una
variable estructurada. El símbolo ':=' es el operador de asignación.
Un sentencia de asignación reemplaza el valor actual de <variable> con el valor de <expresión>. Por
ejemplo,
• X := 8; asigna el valor 8 a la variable X.
La referencia a la variable en la parte izquierda de la asignación puede aparecer en la expresión de la
derecha. Por ejemplo:
• X := X + 1; incrementa en 1 el valor de X.
Otras sentencias de asignación pueden ser:
• X := Y + Z;
• Ready := (X >= 1) and (X < 100);
• Ready := X IN {1..100};
• StringList[I] := Hola!';
© 2013 Tango/04 Computing Group Página 14
Sentencias
5.1.2 Llamadas de procedimiento y función Una llamada de procedimiento o función consiste en el nombre de un procedimiento o función, seguido
por una lista de parámetros. Por ejemplo:
• Append( A, 123 );
• Abs( PI );
5.2 Sentencias estructuradasLas sentencias estructuradas se construyen a partir de otras sentencias. Utilice una sentencia
estructurada cuando desee ejecutar otras sentencias secuencial, condicional o repetidamente. Las
sentencias estructuradas incluyen sentencias compuestas, sentencias condicionales, sentencias de
bucles y sentencias de interrupción de secuencia.
5.2.1 Sentencias compuestas: Sentencias Begin…EndUna sentencia compuesta es una secuencia de otras sentencias (simples o estructuradas) para que se
ejecuten en el orden en que están escritas. Las sentencias compuestas está enmarcado por las
palabras reservadas Begin y End, y punto y comas (;) separan las sentencias que la constituyen. Por
ejemplo:
• Begin
Z := X;
X := Y;
Y := Z;
end;
5.2.2 Sentencias Condicionales: Sentencias If Existen dos formas de sentencias condicionales:
• If...Then, y
• If...Then...Else.
La sintaxis de una sentencia If...Then es:
• If <expresión> Then <sentencia>
• donde < expresión > retorna un valor boleano.
Si la expresión es verdadera, se ejecuta <sentencia> ; y viceversa. Por ejemplo,
• If J <> 0 Then Resultado := I/J;
La sintáxis de una sentencia If...Then...Else es:
• If <expresión> Then <sentencia1> Else <sentencia2>
• donde < expresión > retorna un valor boleano.
Si <expresión> es verdadero se ejecuta <sentencia1>; sino se ejecuta <sentencia2>. Por ejemplo:
• If J = 0 Then
Exit;
Else
Resultado := I/J;
© 2013 Tango/04 Computing Group Página 15
Sentencias
Las cláusulas Then y Else contienen una sentencia cada uno, pero puede ser una sentencia
estructurada. Por ejemplo:
• If J <> 0 Then Begin
Result := I/J;
Count := Count + 1;
End;
Else If Count = Last Then
Done := True;
Else
Exit;
5.2.3 Sentencias Bucle: Sentencias Repeat, While y For Los bucles permiten ejecutar una secuencia de sentencias repetidamente, usando una condición o
variable de control para determinar cuando debe detenerse la ejecución. ALEV tiene tres tipos de
control de bucles: Sentencias Repeat, Sentencias While, y Sentencias For.
Sentencias Repeat
La sintaxis de sentencia repeat es:
• Repeat <sentencia1>; ...; <sentencia>; Until <expresión>
• Donde < expresión > evalúa un valor boleano.
La sentencia repeat ejecuta su sentencia del componente <sentencia> continuamente, comprobando
<expresión> tras cada iteración. Cuando <expresión> evalúa verdadero, finaliza la sentencia repeat. La
secuencia siempre se ejecuta como mínimo una vez, ya que <expresión> no se evalúa hasta la primera
iteración.
Ejemplos de sentencias repeat:
• Repeat
K := I mod J;
I := J;
J := K;
Until J = 0;
Sentencias While
Una sentencia while es similar a una sentencia repeat, excepto que la condición de control se evalúa
antes de la primera ejecución de la secuencia de sentencias. Si, la condición es falsa, nunca se ejecuta
la secuencia de sentencias.
La sintaxis de una sentencia while es:
• While <expresión> Do <sentencia>
• Donde <expresión> evalúa a un valor boleano y <sentencia> puede ser una sentencia
compuesta.
La sentencia while ejecuta su sentencia del componente <sentencia> continuamente, comprobando
<expresión> antes de cada iteración. Mientras <expresión> sea verdadero, continua la ejecución.
Ejemplo de una sentencia while
• While J <> 0 Do Begin
K := I mod J;
© 2013 Tango/04 Computing Group Página 16
Sentencias
I := J;
J := K;
End;
Sentencias For
Una sentencia for, a diferencia de las sentencias repeat o while, requieren que especifique
explícitamente el número de iteraciones que desea que realice el bucle. La sintaxis de una sentencia for
es:
• For <contador> := <ValorInicial> To <ValorFinal> Do <sentencia>
• O
• For <contador> := <ValorInicial> To <ValorFinal> Step <incremento> Do <sentencia>
• O
• For <contador> := <ValorInicial> DownTo <ValorFinal> Do <sentencia>
• O
• For <contador> := <ValorInicial> DownTo <ValorFinal> Step <sentencia> Do <sentencia>
• Donde:
• <contador> es una variable que no puede asignarse dentro de <sentencia>.
• <ValorInicial> y <ValorFinal> son expresiones evaluadas como un valor numérico.
• <sentencia> es una sentencia simple o estructurada que no cambia el valor de <contador>.
• <incremento> es una expresión evaluada como un valor numérico, indicando que <contador>
se incremente entre iteraciones. Si se omite, se asume un <valordepaso> de 1.
La sentencia for asigna el valor de <ValorInicial> a <contador>, entonces ejecuta <sentencia>
repetidamente, incrementando o decreciendo el contador tras cada iteración. (La sintaxis For...To
incrementa <contador>, mientras que la sintaxis For...DownTo lo descuenta.) Cuando el contador
retorna el mismo valor que <ValorFinal>, se ejecuta <sentencia> una vez más y finaliza la sentencia for.
En otras palabras, <sentencia> se ejecuta una vez para cada valor en el rango entre <ValorInicial> y
<ValorFinal>.
• Si <ValorInicial> es igual a <ValorFinal>, la sentencia se ejecuta una sola vez.
• Si <ValorInicial> es mayor que <ValorFinal> en una sentencia For...To, o menor que
<ValorFinal> en una sentencia For...DownTo, la sentencia nunca se ejecutará.
• Cuando la sentencia for termina, el valor del contador es <ValorFinal> + <incremento>.
Ejemplos de sentencias for:
• For I := 2 To 63 Do
If Data[I] > Max Then
Max := Data[I];
• For I := 1 To 10 Do
For J := 1 To 10 Do Begin
X := 0;
For K := 1 To 10 Do
X := X + Mat1[I, K] * Mat2[K, J];
© 2013 Tango/04 Computing Group Página 17
Sentencias
Mat[I, J] := X;
End;
5.2.4 Sentencias de Interrupción de Secuencias: Sentencias Break, Continue y Exit Puede utilizar los procedimientos Break y Continue para controlar el flujo de una sentencia repeat,
while, o for. Break termina la sentencia en la que se produce, mientras que Continue comienza
ejecutando la siguiente iteración de la secuencia.
La sentencia Exit termina la ejecución. La sintaxis de una sentencia exit es:
• Exit; o
• Exit <expresión>;
Si se omite <expresión>, la ejecución del script no retorna ningún valor; por el contrario, el resultado de
evaluar <expresión> se retorna como resultado de la ejecución del script.
© 2013 Tango/04 Computing Group Página 18
Patrones y Expresiones Regulares
Capítulo 6 6 Patrones y Expresiones Regulares
6.1 PatronesUn patrón define un conjunto de cadenas de caracteres. Los operadores LIKE y MATCH trabajan con
patrones, y permiten comparar una cadena de caracteres con un patrón. Si la cadena que se compara
está en el conjunto de cadenas de caracteres definida por el patrón, la comparación se cumple.
Los patrones están formados por caracteres normales, y por caracteres comodín. Los caracteres
comodín son:
También se puede utilizar la pseudo-función REG( Expresión Regular ), que permite utilizar una
Expresión Regular en vez de un patrón con los operadores LIKE y MATCH. Las expresiones regulares
son bastante mas difíciles de utilizar que los patrones, pero son muchísimo mas potentes, permiten
especificar series de caracteres mucho mas complejas.
A modo de ejemplo de patrones, tendríamos:
Comodín Descripción
? Cualquier carácter.
* Cualquier serie de cero o más caracteres.
^Carácter de escape. Indica que el carácter que sigue no es un como-dín.
%...%Análogo al *, pero además especifica un nombre de variable. El ope-rador MATCH, al encontrar un nombre de variable en un patrón, asigna la cadena de sustitución a dicha variable.
Patrón Descripción
'CPF*'Todas las cadenas de caracteres que empiezan con 'CPF'
''CPF????:*'Todas las cadenas que empiezan con 'CPF', seguido de 4 caracteres cualesquiera y el carácter ':'. A continuación puede haber mas texto o no.
'*^*QSYSOPR*'Todas las cadenas que contienen el texto '*QSY-SOPR', en cualquier posición de la cadena.
'*error." Todas las cadenas que terminan en 'error.'
© 2013 Tango/04 Computing Group Página 19
Patrones y Expresiones Regulares
Ejemplos de utilización con LIKE y MATCH:
6.2 Expresiones RegularesUna expresión regular es una fórmula para comparar cadenas de caracteres que siguen alguna
secuencia. Las expresiones regulares están formadas por caracteres normales y por metacaracteres.
Los caracteres normales incluyen a las letras mayúsculas, minúsculas y a los dígitos. Los
metacaracteres tienen un significado especial y se describen en detalle a continuación.
En el caso más simple, una expresión regular es como una cadena de búsqueda corriente. Por ejemplo,
la expresión regular prueba no contiene metacaracteres. Las cadenas "prueba" y "123prueba"
cumplen la expresión regular, pero "Prueba" no la cumple.
Para hacer un buen uso de las expresiones regulares, es crítico entender los metacaracteres. La tabla
siguiente lista los metacaracteres y ofrece una breve explicación de su significado:
'CPF%ERR_CODE%:%ERR_MSG%'
Todas las cadenas de caracteres que empiezan con 'CPF', siguen con cualquier serie de cero o mas caracteres, a continuación el carácter ':', y seguidamente, cualquier serie de cero o mas caracteres. Si el operador que se utiliza es el ope-rador MATCH, la primera serie de cero o más caracteres se asignará a la variable ERR_CODE, y la segunda serie a la variable ERR_MSG.
Patrón Descripción
Expresión x Resultado
'CPF9508:Machine pointer not set for loca‐tion.' LIKE 'CPF*'
= TRUE
'CPF9508:Machine pointer not set for loca‐tion.' LIKE 'CPF?'
= FALSE
'CPF9508:Machine pointer not set for loca‐tion.' LIKE '*CPF*:*'
= TRUE
'CPF9508:Machine pointer not set for loca‐tion.' MATCH 'CPF%ERR_CODE%:%ERR_MSG%'
=
TRUE,ERR_CODE = '9508',ERR_MSG = 'Machine pointer not set for location.'
Metacaracter Descripción
.
Especifica cualquier carácter simple. Por ejemplo, la expresión regular r.t cumpliría con cualquiera de las cadenas "rat", "rut", "r t", pero no con "root".
$
Especifica el final de línea. Por ejemplo, la expresión regular wea-sel$ cumpliría el final de la cadena "He's a weasel" pero no la cadena "They are a bunch of weasels."
^
Especifica el principio de línea. Por ejemplo, la expresión regular ^When in cumpliría el principio de la cadena "When in the course of human events" pero no cumpliría "What and When in the" .
© 2013 Tango/04 Computing Group Página 20
Patrones y Expresiones Regulares
*
Especifica cero o más ocurrencias del carácter o de la expresión regular que lo precede. Por ejemplo, la expresión regular .* signi-fica cualquier número de repeticiones de cualquier carácter.
\
Especifica un carácter literal, y se usa para tratar al carácter que le sigue como un carácter ordinario, en vez de como un metacarater. Por ejemplo, \$ se utiliza para especificar el signo de dólar ($) en vez del final de línea. De forma similar, la expresión \. se utiliza para especificar el carácter punto en vez de cualquier carácter simple.
[ ] [c1‐c2] [^c1‐c2]
Especifica cualquiera de los caracteres entre los corchetes. Por ejemplo, la expresión regular r[aou]t se cumple por las cadenas "rat", "rot", y "rut", pero no por "ret". Se pueden especificar rangos de caracteres utilizando el signo menos o guión. Por ejemplo, la expresión regular [0-9] especifica cualquier dígito. También se pueden especificar múltiples rangos. La expresión regular [A-Za-z] especifica cualquier letra, mayúscula o minúscula. Para especi-ficar cualquier carácter excepto los que se indican en el rango, es decir, el rango complementario, se usa el carácter ^ o circunflejo después de corchete inicial. Por ejemplo, la expresión [^269A-Z] especifica cualquier carácter excepto 2, 6, 9, y las letras mayús-culas.
\< \>
Especifica el principio (\<) o final (\>) de una palabra. Por ejemplo, \<the se cumple por la cadena "for the wise" pero no por la cadena "otherwise".
( ) Trata a la expresión entre paréntesis com un grupo
|
Indica que al menos una de las dos expresiones separadas por la barra vertical | se debe cumplir. Por ejemplo (him|her) se cum-ple por la cadena "it belongs to him" y también por la cadena "it belongs to her", pero no se cumple por la cadena "it belongs to them."
+
Especifica una o más ocurrencias del carácter o de la expresión regular que lo precede. Por ejemplo, la expresión regular 9+ se cumple por las cadenas "9", "99", "999".
?Especifica cero o una ocurrencia del carácter o de la expresión regular que lo precede.
Metacaracter Descripción
© 2013 Tango/04 Computing Group Página 21
Tipo de Datos SET
Capítulo 77 Tipo de Datos SET
Los tipos SET o conjunto, permiten agrupar valores y/o rangos de valores:
• Los Valores pueden ser de cualquier tipo de datos, ya sean tipos de datos básicos o tipos de
datos complejos.
• Los Rangos de Valores o Intervalos están definidos por los valores que delimitan el rango, es
decir, por los extremos del rango o intervalo. Los valores pueden ser de cualquier tipo de
datos, ya sean tipos de datos básicos o tipos de datos complejos.
7.1 Declaración de SETsLa declaración de datos SET debe de cumplir las siguientes reglas:
• Los SET deben de estar delimitados por los caracteres '{'...'}'.
• Los elementos que forman un SET (Valores y Rangos de Valores), se separan por comas ','.
• Los rangos se definen por los valores de los extremos, separados por dos puntos, '..'
• Los Valores y Rangos de Valores de un SET no tienen porqué ser del mismo tipo, es decir, en
un set se pueden incluir valores y rangos de distinto tipo.
Ejemplos:
• { }: Define un conjunto vacío.
• { 1, 3, 5, 7, 9 }: Define el conjunto de números enteros 1, 3, 5 y 7.
• { 0,..10 }: Define el conjunto de números enteros del 0 al 10, es decir, 0, 1, 2 ,3 ,4 ,5 ,6 ,7 ,8 ,9
y 10
• { 0.0..10.0 }: Define el conjunto de números reales del 0 al 10.
• { 'a'..'z', 'A'..'Z', '_' }: Define el conjunto de caracteres de la 'a' a la 'z', mayúsculas y
minúsculas, y también el carácter '_'
• { #9 am#..#2 pm#, #3 pm#..#6:45 pm# }: Define el conjunto de horas que van de las 9:00:00
a las 14:00:00 y de las 15:00:00 a las 18:45:00
• { 'A'..'Z', 0..9 }: Define el conjunto formado por los caracteres de la 'A' a la 'Z', y los números
enteros del 0 al 9.
© 2013 Tango/04 Computing Group Página 22
Tipo de Datos SET
• { { 1, 3, 5, 7, 9 }, { 2, 4, 6, 8, 10 } }: Define un conjunto formado por dos subconjuntos de
enteros.
7.2 Operaciones sobre SETsSobre los datos de tipo SET están definidos los siguientes operadores.
7.3 Utilización de SETsLos SET's son de gran utilidad para simplificar expresiones lógicas, ya que:
• Las condiciones de igualdad ( A =B ) o de desigualdad ( A <> B ) pueden expresarse como
condiciones de pertenencia a un SET de valores ( A IN {B} ) o de no pertenecía a un SET (
NOT A IN {B} ).
• Las condiciones de rango ( ( A =< B ) AND ( B =< C ) por ejemplo ) pueden expresarse como
condiciones de pertenencia a un SET ( B IN {A ..C} en el ejemplo anterior)
• Generalmente, cuando se tienen expresiones lógicas de términos unidos por AND ( Y lógica) u
OR ( O lógica ), la expresión puede simplificarse por una única condición de pertenencia a un
SET
Ejemplo:
Suponga que la variable A contiene la hora actual, y quiere saber si dicha hora actual está dentro del
horario de oficinas de su empresa. El horario de oficinas es de 9 de la mañana a 2 de la tarde, y de 3 de
la tarde a 7 menos cuarto de la tarde. Para representar esta condición sin utilizar SET, sería necesaria
la siguiente expresión lógica:
(( A >= #9 am# ) AND ( A <= #2 pm# )) OR (( A >= #3 pm# ) AND ( A <= #6:45 pm# ))
Utilizando SET's, la expresión anterior puede simplificarse como:
Operando1
OperadorOperando
2Descripción
SET + SETUnión de conjuntos. Devuelve el conjunto formado por los elementos de Operando1 y de Operando2.
SET<not SET>
+<not SET>SET
Inserción en conjunto. Devuelve el con-junto formado por los elementos del Ope-rando de tipo SET mas el elemento de tipo no SET
SET ‐ SETDiferencia de conjuntos. Devuelve el con-junto de elementos de Operando1 que no están en Operando2.
SET<not SET>
‐<not SET>SET
Extracción de conjunto. Devuelve el resul-tado de eliminar el Operando no SET del Operando SET.
SET / SETIntersección de conjuntos. Devuelve el conjunto de elementos presente en los dos Operandos a la vez
VARIANT IN SET
Pertenencia a conjunto. Devuelve un valor de tipo BOOLEAN, TRUE si Operando1 per-tenece a Operando2, FALSE si Operando1 no pertenece a Operando2
© 2013 Tango/04 Computing Group Página 23
Tipo de Datos SET
A IN { { #9 am# .. #2 pm# }, { #3 pm# .. #6:45 pm# } }
Que es mucho mas sencilla de leer. Aún mas, utilizando variables locales, la expresión puede quedar
como:
HorarioOficina := { { #9 am# .. #2 pm# }, { #3 pm# .. #6:45 pm# } };
A IN HorarioOficina
Que es mucho mas explicativa, ya que muestra de forma explícita (por el nombre de la variable
HorarioOficina), qué es lo que calcula la expresión.
© 2013 Tango/04 Computing Group Página 24
Tipo de Datos ARRAY
Capítulo 88 Tipo de Datos ARRAY
Los tipos ARRAY o vector, permiten almacenar valores. Los Valores pueden ser de cualquier tipo de
datos, ya sean tipos de datos básicos o tipos de datos complejos, y dentro de un mismo ARRAY, los
elementos pueden ser de tipos distintos.
Se puede acceder a los elementos del ARRAY utilizando el operador [...]. Entre los caracteres [...] se
debe indicar el Índice del elemento, es decir la posición que el elemento ocupa dentro del ARRAY.
Pero los ARRAYs son asociativos. Esto quiere decir que no sólo se pueden identificar los elementos
por su posición en el ARRAY, si no también por una Clave de Acceso al elemento. Las claves de
acceso pueden ser de cualquier tipo excepto INTEGER.
Otro aspecto importante de los ARRAYs es que son dinámicos: no es necesario especificar sus
dimensiones (nº de elementos) a priori, si no que las dimensiones del ARRAY cambian a medida que se
van insertando elementos en el ARRAY.
8.1 Declaración de ARRAYsLa declaración de datos ARRAY debe de cumplir las siguientes reglas:
• Los ARRAY deben de estar delimitados por los caracteres '['...']'.
• Los elementos que forman un ARRAY, se separan por comas ','.
Si el acceso al ARRAY se va a realizar por clave, los elementos se declararán
especificando en primer lugar la Clave, seguida del carácter :, y a continuación el Valor del
elemento. Aunque se definan claves para los elementos del ARRAY, los elementos
también pueden ser accedidos por índice.
Si el acceso al ARRAY se va a hacer por Índice, pero los elementos del ARRAY no son
consecutivos, se declararán especificando en primer lugar la Posición, seguida del
carácter :, y a continuación el Valor del elemento.
Los Valores del ARRAY no tienen porqué ser del mismo tipo, es decir, en un ARRAY se
pueden incluir valores de distinto tipo.
Ejemplos:
• A := [ ]: Define un array vacío.
• A := [ 1, 3, 5, 7, 9 ]: Define un array con cinco elementos, (1, 3, 5 y 7). El valor 1 ocupa la 1ª
posición, el valor 3 ocupa la 2ª posición,...y el valor 9 ocupa la 5ª posición. Es decir:
A[1] = 1
© 2013 Tango/04 Computing Group Página 25
Tipo de Datos ARRAY
A[2] = 3
...
A[5] = 9
• A := [ 'USUARIO1': 10, 'USUARIO2': 20, 'USUARIO3': 30 ]: Define un array que contiene tres
elementos (10, 20 y 30). El elemento 10 ocupa la primera posición y puede ser accedido por la
clave 'USUARIO1'. Es decir:
A['USUARIO1'] = 10
A['USUARIO2'] = 20
A['USUARIO3'] = 30
• A := [ 3: 10, 2: 20, 10: 30 ]: Define un array con tres elementos ( 10, 20, 30 ). El elemento 10
ocupa la 3ª posición, el elemento 20 ocupa la 2ª posición, y el elemento 30 ocupa la 10ª
posición.
A[3] = 10
A[2] = 20
A[10] = 30
• A := [ [ 1, 3, 5, 7, 9 ], [ 2, 4, 6, 8, 10 ] ]: Define un ARRAY de dos dimensiones ( es decir, un
ARRAY cuyos elementos son ARRAYs )
A[1] = [ 1, 3, 5, 7, 9 ]
A[2] = [ 2, 4, 6, 8, 10 ]
A[1,1] = 1
A[1][1] = 1
A[1,2] = 3
A[2,3] =6
A[2][5] = 10
• A := ['USUARIO1': ['CPU':10, 'MEMORIA': 70], 'USUARIO5': ['CPU':20, 'MEMORIA': 50] ]:
Define un ARRAY de dos dimensiones (es decir, un ARRAY cuyos elementos son ARRAYs )
A[ 'USUARIO1' ] = [ 'CPU':10, 'MEMORIA': 70 ]
A[ 'USUARIO5' ] = [ 'CPU':20, 'MEMORIA': 50 ]
A[ 'USUARIO1', 'CPU' ] = 10
A[ 'USUARIO1', 'MEMORIA' ] = 70
8.2 Operaciones sobre ARRAYsSobre los datos de tipo ARRAY están definidos los siguientes operadores:
Operando1 Operador Operando2 Descripción
ARRAY[ INTE‐GER ]
xAcceso a Elementos por Índice. Accede al valor que ocupa la posición INDICE.
ARRAY[VARI‐ANT]
xAcceso a Elementos por Clave. Accede al valor que tiene como clave asociada el valor CLAVE.
© 2013 Tango/04 Computing Group Página 26
Tipo de Datos ARRAY
8.3 Utilización de ARRAYsUna de las grandes ventajas de los ARRAYs, es que no es necesario inicializarlos. Pueden declararse
variables como ARRAYs vacíos, y añadir los elementos a medida que se obtienen los elementos.
Los ARRAY's son de gran utilidad para representar estructuras de datos. Las Claves de los elementos
permiten tratar a los elementos del array como campos de una estructura.
Ejemplos:
Suponga que usted quiere guardar una lista de consumo de CPU por usuario del sistema. La aplicación
le proporciona, cada vez que se deben evaluar las expresiones, el nombre de un usuario en la variable
USER, y el consumo de CPU que realiza dicho usuario en la variable USER_CPU.
Usted podría definir una variable llamada CPU_PorUsuario, de tipo ARRAY como:
CPU_PorUsuario = []
Y definir la siguiente expresión:
CPU_PorUsuario[ USER ] = USER_CPU
Al cabo de un rato, usted tendrá una lista con los consumos de CPU por usuario similar a la siguiente:
CPU_PorUsuario = [ 'DAVID': 35.52, 'JUAN': 22.31, 'MARTA': 10.12 ]
Y por ejemplo, usted podría definir una condición si el usuario JUAN superase el 30 % de utilización
como:
CPU_PorUsuario[ 'JUAN' ] > 30
VARIANT IN ARRAY
Pertenencia a Array. Devuelve un valor de tipo BOOLEAN, TRUE si Operando1 está contenido en Operando2, FALSE si Operando1 no está contenido en Operando2
Operando1 Operador Operando2 Descripción
© 2013 Tango/04 Computing Group Página 27
Apéndice A : Funciones en ALEV Script v1.5
Apéndice AApéndice A: Funciones en ALEV Script v1.5
A.1 Categorías de Funciones• Tratamiento de Arrays
• Tratamiento de Fecha y Hora
• Lógicas
• Aritméticas
• Estadísticas
• Procesamiento de Cadenas
• Conversión de Tipo
• De Información de Entorno
A.2 Funciones de Tratamiento de Arrays• FIND
• INDEXOF
• KEYAT
• KEYOF
• SIZEOF
• APPEND
• DELETE
• INSERT
A.2.1 FIND Descripción: Busca la primera aparición del ítem V en el array A, y retorna su clave o posición.
Definición: FUNCTION FIND( V VARIANT, A ARRAY ) : VARIANT
Resultado: La clave o posición en el array A donde se encuentra el ítem V.
© 2013 Tango/04 Computing Group Página 28
Apéndice A : Funciones en ALEV Script v1.5
Parámetros:
• V: El VALUE que desea obtener.
• A: El array en el cual se busca VALUE.
A.2.2 INDEXOF Descripción: Devuelve el índice de un valor en un array.
Definición:
• FUNCTION INDEXOF( VALUE VARIANT, VECTOR ARRAY ) : VARIANT;
• FUNCTION ORD( VALUE VARIANT, VECTOR ARRAY ) : VARIANT;
Resultado:
• FALSE si el valor VALUE no está contenido en el array VECTOR.
• INTEGER si el valor VALUE está contenido en el array VECTOR, indicando su posición.
Parámetros:
• VALUE: Parámetro de Entrada. El valor del cual se desea obtener el índice.
• VECTOR: Parámetro de Entrada. El array en el cual se busca VALUE.
A.2.3 KEYAT Descripción: Retorna el valor KEY asociado al ítem en la posición POS en el Array.
Definición: FUNCTION KEYAT ( POS INTEGER, A ARRAY ) : VARIANT
Resultado: La clave en la posición POS del array A.
Parámetros:
• POS: La posición en el array para la cual desea obtener la KEY asociada.
• A: El array en el cual se busca POS.
A.2.4 KEYOF Descripción: Devuelve la clave (key) de un valor en un array asociativo (indexado por un valor no-
INTEGER).
Definición: FUNCTION KEYXOF( VALUE VARIANT, VECTOR ARRAY ) : VARIANT;
Resultado:
• FALSE si el valor VALUE no está contenido en el array VECTOR
• VARIANT si el valor VALUE está contenido en el array VECTOR, indicando su posición
Parámetros:
• VALUE: Parámetro de Entrada. El valor del cual se desea obtener la clave.
• VECTOR: Parámetro de Entrada. El array en el cual se busca VALUE.
A.2.5 SIZEOF Descripción: Devuelve el número de elementos en un array.
© 2013 Tango/04 Computing Group Página 29
Apéndice A : Funciones en ALEV Script v1.5
Definición: FUNCTION SIZEOF( VECTOR ARRAY ) : INTEGER;
Resultado: INTEGER: El número de elementos en el array. Incluye todos los valores, aunque no estén
definidos.
Parámetros: VECTOR (Parámetro de Entrada). El array del cual se desea obtener el número de
elementos.
A.2.6 APPEND Descripción: Añade VALUE en la última posición del array A.
Definición: PROCEDURE APPEND( VAR A ARRAY, VALUE VARIANT )
Parámetros:
• A: El array en el cual desea añadir VALUE.
• VALUE: El ítem que desea añadir al array A.
A.2.7 DELETE Descripción: Elimina un elemento de un array.
Definición: PROCEDURE DELETE( VAR VECTOR ARRAY, KEY_POS VARIANT );
Resultado: Ninguno.
Parámetros:
• VECTOR: Parámetro de Entrada/Salida. El array del que se quiere eliminar un elemento. Debe
ser una variable de tipo ARRAY.
• KEY_POS: El índice (INTEGER) o la clave (no INTEGER) que se quiere eliminar.
A.2.8 INSERT Descripción: Inserta VALUE en KEY_POS del array A.
Definición: PROCEDURE INSERT( VAR A ARRAY, KEY_POS VARIANT, VALUE VARIANT)
Parámetros:
• A: El array donde quiere insertar el ítem VALUE.
• KEY_POS: La clave o posición donde desea insertar VALUE.
• VALUE: El ítem que desea insertar en el array A.
A.3 Funciones de Tratamiento de Fecha y Hora• DATE
• DAY
• DAYNAME
• DAYOFWEEK
• HOUR
• MINUTE
© 2013 Tango/04 Computing Group Página 30
Apéndice A : Funciones en ALEV Script v1.5
• MONTH
• MONTHNAME
• NOW
• SECOND
• TIME
• WEEKOFMONTH
• WEEKOFYEAR
• YEAR
A.3.1 DATE (Funciones de Tratamiento de Fecha y Hora) Descripción: Dependiendo del argumento, devuelve un valor de fecha.
Definición:
• FUNCTION DATE( ) : DATE;
• FUNCTION DATE( DAY INTEGER, MONTH INTEGER, [YEAR INTEGER] ) : DATE;
Resultado: De tipo DATE, dependiendo de los parámetros. Ver Parámetros..
Parámetros:
• Sin Parámetros:Devuelve la fecha actual.
• DAY, MONTH, YEAR: Devuelve la fecha de día DAY, mes MONTH y año YEAR. Si YEAR se
omite, se toma el año en curso.
A.3.2 DAY Descripción: Dependiendo de los parámetros, devuelve valores relacionados con días.
Definición:
• FUNCTION DAY( ) : INTEGER;
• FUNCTION DAY( D DATETIME ) :INTEGER;
• FUNCTION DAY( R REAL ) :DATETIME;
Resultado: Ver Parámetros.
Parámetros:
• Sin Parámetros:Devuelve el día en curso.
• D DATETIME: Devuelve el día de D.
• R REAL: Devuelve un valor de fecha y hora correspondiente a R días. Los meses se toman de
30 días y los años de 360 días.
A.3.3 DAYNAME Descripción: Devuelve el nombre del día especificado por una fecha.
Definición: FUNCTION DAYNAME( D DATETIME ) :STRING;
© 2013 Tango/04 Computing Group Página 31
Apéndice A : Funciones en ALEV Script v1.5
Resultado: Un string con el nombre del día: Lunes, Martes,...
Parámetros: D: La fecha de la cual se quiere obtener el nombre del día.
A.3.4 DAYOFWEEK Descripción: Devuelve el día de la semana del día especificado pos una fecha.
Definición: FUNCTION DAYOFWEEK( D DATETIME ) :INTEGER;
Resultado: Un entero entre 1 y 7, siendo:
• 1 : Domingo
• 2 : Lunes
• 3 : Martes
• 4 : Miércoles
• 5 : Jueves
• 6 : Viernes
• 7 : Sábado
Parámetros: D: La fecha de cuyo día se quiere obtener el nombre.
A.3.5 HOUR Descripción: Dependiendo de los parámetros, devuelve valores relacionados con la hora.
Definición:
• FUNCTION HOUR( ) :INTEGER;
• FUNCTION HOUR( D DATETIME ) :INTEGER;
• FUNCTION HOUR( R REAL ) :DATETIME;
Resultado: Ver Parámetros.
Parámetros:
• Sin Parámetros: Devuelve la hora en curso.
• D DATETIME: Devuelve la hora de D.
• R REAL: Devuelve un valor de fecha y hora correspondiente a R horas.
A.3.6 MINUTE Descripción: Dependiendo de los parámetros, devuelve valores relacionados con minutos.
Definición:
• FUNCTION MINUTE( ) :INTEGER;
• FUNCTION MINUTE( D DATETIME ) :INTEGER;
• FUNCTION MINUTE( R REAL ) :DATETIME;
Resultado: Ver Parámetros.
Parámetros:
© 2013 Tango/04 Computing Group Página 32
Apéndice A : Funciones en ALEV Script v1.5
• Sin Parámetros: Devuelve el minuto en curso.
• D DATETIME: Devuelve los minutos de D.
• R REAL: Devuelve un valor de fecha y hora correspondiente a R minutos.
A.3.7 MONTH Descripción: Dependiendo de los parámetros, devuelve valores relacionados con meses.
Definición:
• FUNCTION MONTH( ) : INTEGER;
• FUNCTION MONTH( D DATETIME ) :INTEGER;
• FUNCTION MONTH( R REAL ) :DATETIME;
Resultado: Ver Parámetros.
Parámetros:
• Sin Parámetros: Devuelve el mes en curso.
• D DATETIME: Devuelve el mes de D.
• R REAL: Devuelve un valor de fecha y hora correspondiente a R meses. Los meses se toman
de 30 días y los años de 360 días.
A.3.8 MONTHNAME Descripción: Devuelve el nombre del mes de la fecha especificada.
Definición: FUNCTION MONTHNAME( D DATETIME ) STRING;
Resultado: Una cadena de caracteres con el nombre del mes.
Parámetros: D: La fecha de cuyo mes se quiere obtener el nombre.
A.3.9 NOW Descripción: Devuelve la fecha y hora actual del sistema.
Definición: FUNCTION NOW( ) : DATETIME;
Resultado: La fecha y hora actual.
Parámetros: Ninguno.
A.3.10 SECOND Descripción: Dependiendo de los parámetros, devuelve valores relacionados con segundos.
Definición:
• FUNCTION SECOND( ) : REAL;
• FUNCTION SECOND( D DATETIME ) :INTEGER;
• FUNCTION SECOND( R REAL ) :DATETIME;
Resultado: Ver Parámetros.
Parámetros:
© 2013 Tango/04 Computing Group Página 33
Apéndice A : Funciones en ALEV Script v1.5
• Sin Parámetros: Devuelve el segundo (y milisegundos) en curso.
• D DATETIME: Devuelve los segundos (y milisegundos) de D.
• R REAL: Devuelve un valor de fecha y hora correspondiente a R segundos (y milisegundos).
A.3.11 TIME Descripción: Dependiendo del argumento, devuelve un valor de hora.
Definición:
• FUNCTION TIME( ) : TIME;
• FUNCTION TIME( H INTEGER, M INTEGER, [S INTEGER, MS INTEGER] ) : TIME;
Resultado: De tipo TIME, dependiendo de los parámetros. Ver Parámetros..
Parámetros:
• Sin Parámetros: Devuelve la hora actual.
• H, M, S, MS: Devuelve la hora H, minuto M, segundo S y milisegundo MS. Si S y MS se omite,
se toman 0 segundos, 0 milisegundos.
A.3.12 WEEKOFMONTH Descripción: Devuelve la semana del mes a la que pertenece una fecha dada.
Definición: FUNCTION WEEKOFMONTH( D DATETIME ) :INTEGER;
Resultado: El número de semana del mes a la que pertenece la fecha D. Un entero entre 1 y 5
Parámetros: D: La fecha de la que se quiere obtener la semana.
A.3.13 WEEKOFYEAR Descripción: Devuelve la semana del año a la que pertenece una fecha.
Definición: FUNCTION WEEKOFYEAR( D DATETIME ) :INTEGER;
Resultado: El número de semana del año a la que pertenece la fecha D. Un entero entre 1 y 53
Parámetros: D: La fecha de la que se quiere obtener el número de semana.
A.3.14 YEAR Descripción: Dependiendo de los parámetros, devuelve valores relacionados con años.
Definición:
• FUNCTION YEAR( ) : INTEGER;
• FUNCTION YEAR( D DATETIME ) :INTEGER;
• FUNCTION YEAR( R REAL ) :DATETIME;
Resultado: Ver Parámetros.
Parámetros:
• Sin Parámetros: Devuelve el año en curso.
• D DATETIME: Devuelve el año de D.
© 2013 Tango/04 Computing Group Página 34
Apéndice A : Funciones en ALEV Script v1.5
• R REAL: Devuelve un valor de fecha y hora correspondiente a R años. Los meses se toman
de 30 días y los años de 360 días.
A.4 Funciones Lógicas• IIF
• SELECT
A.4.1 IIF Descripción: Selecciona de entre dos valores en función de la condición especificada.
Definición: FUNCTION IIF( CONDITION BOOLEAN, IF_TRUE VARIANT, IF_FALSE VARIANT ) :
VARIANT;
Resultado:
• Si CONDITION = TRUE, entonces devuelve el valor IF_TRUE.
• Si CONDITION = FALSE, entonces devuelve el valor IF_FALSE.
Parámetros:
• CONDITION: Condición de selección.
• IF_TRUE: Valor que se devuelve en el caso de cumplirse la condición.
• IF_FALSE: Valor que se devuelve en el caso de no cumplirse la condición.
A.4.2 SELECT Descripción: Selecciona uno de entre varios valores.
Definición: FUNCTION SELECT( E VARIANT, [V0 VARIANT, R0 VARIANT ], DEFAULT VARIANT ) :
VARIANT;
Resultado: Vi, si E = Vi para algún i. El último de los argumentos, el valor por defecto, si E <> Vi para
todo i.
Parámetros:
• E: Expresión de selección.
• Vi: Valor de selección.
• Ri: Resultado de la selección.
• Default : El valor que se devuelve en caso de que la expresión de selección no sea igual a
ninguno de los valores de selección.
A.5 Funciones Aritméticas• ABS
• ARCCOS
• ARCSIN
• ARCTAN
© 2013 Tango/04 Computing Group Página 35
Apéndice A : Funciones en ALEV Script v1.5
• COS
• EXP
• FRAC
• LN
• POW
• RANDOM
• ROUND
• SIN
• SQRT
• TAN
A.5.1 ABS Descripción: Devuelve el valor absoluto del argumento.
Definición: FUNCTION ABS( NUMBER VARIANT ) : VARIANT;
Resultado: El valor absoluto de NUMBER. El tipo del resultado es el mismo que el del argumento
NUMBER.
Parámetros: NUMBER: Número ( REAL o INTEGER ) del cual se desea obtener el valor absoluto.
A.5.2 ARCCOS Descripción: Devuelve el arco (en radianes) cuyo coseno vale el argumento.
Definición: FUNCTION ARCCOS( COSINE VARIANT ) : REAL;
Resultado: El arco (en radianes) cuyo coseno vale el COSINE.
Parámetros: COSINE: Valor de coseno del cual se calcula el arco. Puede ser INTEGER o REAL.
A.5.3 ARCSIN Descripción: Devuelve el arco (en radianes) cuyo seno vale el argumento.
Definición: FUNCTION ARCSIN( SINE VARIANT ) : REAL;
Resultado: El arco (en radianes) cuyo seno vale el SINE.
Parámetros: SINE: Valor de seno del cual se calcula el arco. Puede ser INTEGER o REAL.
A.5.4 ARCTAN Descripción: Devuelve el arco (en radianes) cuya tangente vale el argumento.
Definición: FUNCTION ARCTAN( TANGET VARIANT ) : REAL;
Resultado: El arco (en radianes) cuya tangente vale el TANGENT.
Parámetros: TANGENT: Valor de tangente de la cual se calcula el arco. Puede ser INTEGER o REAL.
A.5.5 COS
© 2013 Tango/04 Computing Group Página 36
Apéndice A : Funciones en ALEV Script v1.5
Descripción: Calcula el coseno del argumento
Definición: FUNCTION COS( ANGLE VARIANT ) : REAL;
Resultado: El coseno de ANGLE.
Parámetros: ANGLE: Angulo (en radianes). Puede ser INTEGER o REAL.
A.5.6 EXP Descripción: Calcula el resultado de elevar el número e al argumento
Definición: FUNCTION EXP( N VARIANT ) : REAL;
Resultado: en
Parámetros: N: INTEGER o REAL, el exponente al que se eleva el número e.
A.5.7 FRAC Descripción: Devuelve la parte decimal de un número real.
Definición: FUNCTION FRAC( N VARIANT ) :REAL ;
Resultado: La parte decimal de N.
Parámetros: N: INTEGER o REAL, número del que se quiere obtener la parte decimal.
A.5.8 LN Descripción: Calcula el logaritmo neperiano del argumento.
Definición: FUNCTION LN( N VARIANT) : REAL;
Resultado: El logaritmo neperiano de N.
Parámetros: N INTEGER o REAL, el número del cual se quiere obtener el logaritmo neperiano.
A.5.9 POW Descripción: Calcula la potencia de base y exponente especificados en los argumentos.
Definición: FUNCTION POW( BASE VARIANT, EXPONENT VARIANT ) : VARIANT;
Resultado: Si el resultado puede representarse como un número INTEGER, el resultado será
INTEGER. Si no, será REAL.
Parámetros: BASE, EXPONENTE: Números, INTEGER o REAL
A.5.10 RANDOM Descripción: Devuelve un número aleatorio dentro del rango especificado.
Definición:
• FUNCTION RANDOM( ) : REAL;
• FUNCTION RANDOM( N INTEGER ) : INTEGER;
• FUNCTION RANDOM( N REAL ) : REAL;
• FUNCTION RANDOM( N SET ) : VARIANT;
© 2013 Tango/04 Computing Group Página 37
Apéndice A : Funciones en ALEV Script v1.5
• FUNCTION RANDOM( N ARRAY ) : VARIANT;
• FUNCTION RANDOM( ... ) : INTEGER;
Resultado: Depende de los parámetros especificados, ver Parámetros.
Parámetros:
• Sin parámetros: Devuelve un número aleatorio real, en el intervalo [0,1]
• N INTEGER: Devuelve un número aleatorio entero, en el intervalo [0,N]
• N REAL: Devuelve un número aleatorio real, en el intervalo [0,N]
• N SET: Devuelve un valor aleatorio, comprendido en el set N.
• N ARRAY: Devuelve un valor aleatorio de entre los elementos del array N.
• Más de un parámetro: Devuelve uno de los parámetros de forma aleatoria.
A.5.11 ROUND Descripción: Redondea un valor REAL, devolviendo el valor entero que más se aproxima a dicho
valor.
Definición: FUNCTION ROUND( N VARIANT ) : INTEGER;
Resultado: El valor entero que más se aproxima a N, de modo que ABS( N - ROUND( N ) ) <= 0.5 para
todo N.
Parámetros: N, el valor que se quiere redondear. Puede ser INTEGER o REAL.
A.5.12 SIN Descripción: Calcula el seno del argumento
Definición: FUNCTION SIN( ANGLE VARIANT ) : REAL;
Resultado: El seno del ángulo ANGLE.
Parámetros: ANGLE : Angulo (en radianes). Puede ser INTEGER o REAL.
A.5.13 SQRT Descripción: Calcula la raíz cuadrada del argumento.
Definición: FUNCTION SQRT( N VARIANT ) : REAL;
Resultado: La raíz cuadrada del argumento.
Parámetros: N: Número del cual se calcula la raíz cuadrada.
A.5.14 TAN Descripción: Calcula la tangente del argumento
Definición: FUNCTION TAN( ANGLE VARIANT ) : REAL;
Resultado: La tangente del argumento
Parámetros: ANGLE: Angulo (en radianes). Puede ser INTEGER o REAL.
© 2013 Tango/04 Computing Group Página 38
Apéndice A : Funciones en ALEV Script v1.5
A.6 Funciones Estadísticas • AVERAGE
• MAX
• MIN
• VARIANCE
A.6.1 AVERAGE Descripción: Retorna el valor promedio de los argumentos de tipo número (INTEGER o REAL ). Si solo
hay un argumento, y es un ARRAY, devuelve el valor promedio de los ítems de tipo número.
Definición: FUNCTION AVERAGE( V VARIANT, ... ) : REAL
Resultado: El promedio aritmético de los valores pasados como parámetros.
Parámetros: V: Si V es un valor de tipo Array, el resultado es el promedio aritmético de los ítems
enteros y reales en el array. Si hay más de un parámetro (digamos V0, V1, ...VN), el resultado es el
promedio aritmético de V0...VN.
A.6.2 MAX Descripción: Obtiene el máximo de los argumentos.
Definición: FUNCTION MAX( V VARIANT, ...) : VARIANT;
Resultado:
• Si V es un ARRAY, devuelve el máximo de los valores del array.
• Si V no es un ARRAY, devuelve el máximo de los argumentos.
Parámetros: V Si es un ARRAY, no se esperan más argumentos. Si no es un array, se esperan al
menos dos argumentos.
A.6.3 MIN Descripción: Obtiene el mínimo de los argumentos.
Definición: FUNCTION MIN( V VARIANT, ...) : VARIANT;
Resultado:
• Si V es un ARRAY, devuelve el mínimo de los valores del array.
• Si V no es un ARRAY, devuelve el mínimo de los argumentos.
Parámetros: V Si es un ARRAY, no se esperan más argumentos. Si no es un array, se esperan al
menos dos argumentos.
A.6.4 VARIANCE Descripción: Retorna el valor de la varianza de los argumentos de tipo número (INTEGER o REAL). Si
solo hay un argumento, y es un ARRAY, retorna el valor de la varianza de los ítems de tipo número.
Definición: FUNCTION VARIANCE( V VARIANT, ... ) : REAL
© 2013 Tango/04 Computing Group Página 39
Apéndice A : Funciones en ALEV Script v1.5
Resultado: La varianza estadística (la desviación estándar elevada al cuadrado) de los valores
pasados como parámetros.
Parámetros: V: Si V es un valor de tipo Array, el resultado es la varianza estadística de los ítems
enteros y reales en el array. Si hay más de un parámetro (digamos V0, V1, ...VN), el resultado es la
varianza estadística de V0...VN.
A.7 Funciones de Tratamiento de Strings• COPY
• DELETE
• FORMAT
• HEAD
• LEN
• LENGTH
• LOCATE
• LOWER
• LOWERCASE
• LTRIM
• POS
• POSITION
• REPLACE
• REVERSE
• RTRIM
• SUBS
• SUBSTRING
• TAIL
• TRIM
• UPPER
• UPPERCASE
A.7.1 COPY Descripción: Copia una porción de una cadena de caracteres.
Definición: FUNCTION COPY( S STRING, INDEX INTEGER [, LEN INTEGER] ) : STRING;
Resultado: Si se especifica una longitud LEN, devuelve la subcadena que empieza en INDEX de
longitud LEN. Si no, devuelve la subcadena que empieza en INDEX y que termina al final de S.
Parámetros:
• S: Cadena de caracteres de la que se obtiene la subcadena.
© 2013 Tango/04 Computing Group Página 40
Apéndice A : Funciones en ALEV Script v1.5
• INDEX: Posición en la que empieza la subcadena.
• COUNT: Opcional. La longitud de la subcadena.
A.7.2 DELETE Descripción: Corta o elimina una subcadena de una cadena de caracteres dada.
Definición: FUNCTION DELETE( S STRING, INDEX INTEGER [, LEN INTEGER ] ) : STRING;
Resultado: La cadena de caracteres S de la que se ha eliminado la subcadena que empieza en la
posición INDEX y que tiene longitud LEN. Si LEN se omite, devuelve la cadena S hasta la posición
INDEX.
Parámetros:
• S: Cadena de la que se quieren eliminar la subcadena.
• INDEX: Posición en la que empieza la subcadena que se quiere eliminar.
• LEN: Opcional. Indica la longitud de la subcadena que se quiere eliminar. Si se omite, la
subcadena empieza en la posición INDEX y termina al final de S.
A.7.3 FORMAT Descripción: Formatea la cadena S, reemplazando todas las subexpresiones de S delimitadas por el
carácter % por su valor.
Definición: FUNCTION FORMAT( S STRING ) : STRING
Resultado: Un valor de cadena, consistente en el parámetro S donde todas las expresiones ALEV
delimitadas por %han sido reemplazadas por su valor.
Parámetros: S: Una cadena formateada, consistente de texto plano y expresiones ALEV delimitadas
por %, como en el siguiente ejemplo:
("Uno más dos es %1+2%") = " Uno más dos es 3")
A.7.4 HEAD Descripción: Devuelve el primer carácter de una cadena de caracteres.
Definición: FUNCTION HEAD( S STRING ) : STRING;
Resultado: El primer carácter de la cadena de caracteres S.
Parámetros: S: Cadena de caracteres de la que se quiere obtener el primer carácter.
A.7.5 LEN Descripción: Retorna la longitud de una cadena de caracteres.
Definición: FUNCTION LEN( S STRING ) : INTEGER
Resultado: La longitud de la cadena de caracteres S.
Parámetros: La cadena de caracteres cuya longitud se desea obtener.
A.7.6 LENGTH Descripción: Devuelve la longitud de una cadena de caracteres,
© 2013 Tango/04 Computing Group Página 41
Apéndice A : Funciones en ALEV Script v1.5
Definición: FUNCTION LENGTH( S STRING ) : INTEGER;
Resultado: La longitud de la cadena de caracteres S.
Parámetros: S: La cadena de caracteres de la que se quiere obtener la longitud.
A.7.7 LOCATE Descripción: Busca la posición de una subcadena dentro de una cadena de caracteres.
Definición: FUNCTION LOCATE( SUBS STRING, S STRING ) : INTEGER;
Resultado: La posición de SUBS en S.
Parámetros:
• SUBS: La subcadena que se busca.
• S: La cedena de caracteres en la que busca.
A.7.8 LOWER Descripción: Convierte el argumento de una cadena de caracteres a minúsculas.
Definición: FUNCTION LOWER( S STRING ) : STRING
Resultado: La cadena de caracteres S convertida a minúsculas.
Parámetros: La cadena de caracteres que desea convertir a minúsculas.
A.7.9 LOWERCASE Descripción: Pasa a minúsculas la cadena de caracteres pasada como argumento.
Definición: FUNCTION LOWERCASE( S STRING ) : STRING;
Resultado: La cadena de caracteres S convertida a minúsculas.
Parámetros: S: La cadena de caracteres que se quiere convertir a minúsculas.
A.7.10 LTRIM Descripción: Elimina los espacios iniciales o a la izquierda de la cadena de caracteres pasada como
argumento.
Definición: FUNCTION LTRIM( S STRING ) : STRING;
Resultado: La cadena de caracteres S de la que se han eliminado todos los espacios iniciales
Parámetros: S: La cadena de caracteres de la que se quieren eliminar los caracteres en blanco
iniciales.
A.7.11 POS Descripción: Busca la posición de una subcadena dentro de una cadena de caracteres.
Definición: FUNCTION POS( SUBS STRING, S STRING ) : INTEGER;
Resultado: La posición de SUBS en S.
Parámetros:
© 2013 Tango/04 Computing Group Página 42
Apéndice A : Funciones en ALEV Script v1.5
• SUBS: La subcadena que se busca.
• S: La cadena de caracteres en la que se busca.
A.7.12 POSITION Descripción: Busca la posición de una subcadena dentro de una cadena de caracteres.
Definición: FUNCTION POSITION( SUBS STRING, S STRING ): INTEGER
Resultado: La posición de SUBS en S.
Parámetros:
• SUBS: La subcadena que se busca.
• S: La cadena de caracteres en la que se busca.
A.7.13 REPLACE Descripción: Reemplaza una subcadena por otra, dentro de una cadena de caracteres.
Definición: FUNCTION REPLACE( S STRING, S1 STRING, S2 STRING ) : STRING;
Resultado: La cadena de caracteres S, en la que se han reemplazado las ocurrencias de la subcadena
S1 por la subcadena S2.
Parámetros:
• S: La cadena de caracteres en la que se quiere hacer el reemplazo.
• S1: La subcadena a reemplazar.
• S2: La subcadena por la que se reemplaza.
A.7.14 REVERSE Descripción: Invierte una cadena de caracteres.
Definición: FUNCTION REVERSE( S STRING ) : STRING;
Resultado: La cadena de caracteres S invertida, es decir, en la que el primer carácter pasa a la última
posición, el segundo carácter a la penúltima, etc.
Parámetros: S: La cadena de caracteres que se quiere invertir.
A.7.15 RTRIM Descripción: Elimina los espacios en blanco al final de una cadena de caracteres.
Definición: FUNCTION RTRIM( S STRING ) : STRING;
Resultado: La cadena de caracteres S de la que se han eliminado los espacios en blanco finales.
Parámetros: S : La cadena de caracteres de la que se quieren eliminar los espacios en blanco finales.
A.7.16 SUBS Descripción: Copia una porción de la cadena de caracteres.
Definición: FUNCTION SUBS( S STRING, INDEX INTEGER [, COUNT INTEGER] ) : STRING;
© 2013 Tango/04 Computing Group Página 43
Apéndice A : Funciones en ALEV Script v1.5
Resultado: Si se ha especificado un COUNT, retorna una subcadena, que empieza en INDEX con la
longitud LEN. Si no, retorna la subcadena que empieza en INDEX y finaliza en S.
Parámetros:
• Cadena de caracteres de la cual se toma la subcadena.
• INDEX: Posición donde empieza la subcadena.
• COUNT: Opcional. El contador de la subcadena.
A.7.17 SUBSTRING Descripción: Copia una porción de la cadena de caracteres.
Definición: FUNCTION SUBS( S STRING, INDEX INTEGER [, COUNT INTEGER] ) : STRING;
Resultado: Si se ha especificado un COUNT, retorna una subcadena, que empieza en INDEX con la
longitud LEN. Si no, retorna la subcadena que empieza en INDEX y finaliza en S.
Parámetros:
• Cadena de caracteres de la cual se toma la subcadena.
• INDEX: Posición donde empieza la subcadena.
• COUNT: Opcional. El contador de la subcadena.
A.7.18 TAIL Descripción: Devuelve la cola de una cadena de caracteres, es decir, la cadena original menos el
primer carácter.
Definición: FUNCTION TAIL( S STRING ) : STRING;
Resultado: La cadena de caracteres S menos el primer carácter.
Parámetros: S: La cadena de caracteres de la que se quiere extraer el primer carácter.
A.7.19 TRIM Descripción: Elimina los espacios en blanco al principio y al final de una cadena de caracteres.
Definición: FUNCTION TRIM( S STRING ) : STRING;
Resultado: La cadena de caracteres S de la que se han eliminado los espacios en blanco al principio y
al final.
Parámetros: S: La cadena de caracteres S de la que se quieren eliminar los espacios en blanco al
principio y al final.
A.7.20 UPPER Descripción: Pasa a mayúsculas la cadena de caracteres pasada como argumento.
Definición: FUNCTION UPPER( S STRING ) : STRING
Resultado: La cadena de caracteres S convertida a mayúsculas.
Parámetros: La cadena de caracteres que desea pasar a mayúsculas.
© 2013 Tango/04 Computing Group Página 44
Apéndice A : Funciones en ALEV Script v1.5
A.7.21 UPPERCASE Descripción: Pasa a mayúsculas la cadena de caracteres pasada como argumento.
Definición: FUNCTION UPPERCASE( S STRING ) : STRING;
Resultado: La cadena de caracteres S convertida a mayúsculas.
Parámetros: S: La cadena de caracteres que se quiere convertir a mayúsculas.
A.8 Funciones de Conversión de Tipo• BOOLEAN
• DATE
• DATETIME
• INTEGER
• REAL
• REG
• REGEXP
• STRING
• TIME
A.8.1 BOOLEAN Descripción: Convierte el argumento a lógico.
Definición: FUNCTION BOOLEAN( VALUE VARIANT ) : BOOLEAN;
Resultado: El valor V convertido a lógico.
Parámetros: Value (Parámetro de Entrada). Variable de cualquier tipo (VARIANT) excepto VOID.
A.8.2 DATE Descripción: Convierte el argumento a fecha.
Definición: FUNCTION DATE( VALUE VARIANT ) : DATE;
Resultado: El valor V convertido a fecha.
Parámetros: Value (Parámetro de Entrada). Variable de cualquier tipo (VARIANT) excepto VOID.
A.8.3 DATETIME Descripción: Convierte el argumento a fecha y hora.
Definición: FUNCTION DATETIME( VALUE VARIANT ) : DATETIME;
Resultado: El valor V convertido a fecha y hora.
Parámetros: Value (Parámetro de Entrada). Variable de cualquier tipo (VARIANT) excepto VOID.
© 2013 Tango/04 Computing Group Página 45
Apéndice A : Funciones en ALEV Script v1.5
A.8.4 INTEGER Descripción: Convierte el argumento a entero.
Definición: FUNCTION INTEGER( VALUE VARIANT ) : INTEGER;
Resultado: El valor V convertido a entero.
Parámetros: Value (Parámetro de Entrada). Variable de cualquier tipo (VARIANT) excepto VOID.
A.8.5 REAL Descripción: Convierte el argumento a real.
Definición: FUNCTION REAL( VALUE VARIANT ) : REAL;
Resultado: El valor V convertido a real.
Parámetros: Value (Parámetro de Entrada). Variable de cualquier tipo (VARIANT) excepto VOID.
A.8.6 REG Descripción: Convierte VALUE a un valor de tipo Expresión Regular.
Definición: FUNCTION REG( PATTERN STRING ) : REGEXP
Resultado: El valor de la cadena PATTERN convertido a un valor de Expresión Regular.
Parámetros: PATTERN: La cadena que desea convertir a Expresión Regular.
A.8.7 REGEXP Descripción: Convierte VALUE a un valor de tipo Expresión Regular.
Definición: FUNCTION REGEXP( PATTERN STRING ) : REGEXP
Resultado: El valor de la cadena PATTERN convertido a un valor de Expresión Regular.
Parámetros: PATTERN: La cadena que desea convertir a Expresión Regular.
A.8.8 STRING Descripción: Convierte el argumento a cadena de caracteres.
Definición: FUNCTION STRING( VALUE VARIANT ) : STRING;
Resultado: El valor V convertido a cadena de caracteres.
Parámetros: Value (Parámetro de Entrada).Variable de cualquier tipo (VARIANT) excepto VOID.
A.8.9 TIME Descripción: Convierte el argumento a hora.
Nota
Recuerde utilizar expresiones regulares generadas con funciones REG/REGEXP en el
operando de la derecha para los operadores LIKE/MATCH.
Nota
Recuerde utilizar expresiones regulares generadas con funciones REG/REGEXP en el
operando de la derecha para los operadores LIKE/MATCH.
© 2013 Tango/04 Computing Group Página 46
Apéndice A : Funciones en ALEV Script v1.5
Definición: FUNCTION TIME( VALUE VARIANT ) : TIME;
Resultado: El valor V convertido a hora.
Parámetros: Value (Parámetro de Entrada). Variable de cualquier tipo (VARIANT) excepto VOID.
A.9 Funciones de Información de Entorno• ASSIGNED
• DEFINED
• EXIST
• ISBLANK
• ISNULL
• ISNUM
• ISZERO
• TYPENAME
A.9.1 ASSIGNED Descripción: Comprueba si una variable está definida, y tiene un valor asignado.
Definición:
• FUNCTION EXIST( VARREF ) : BOOLEAN;
• FUNCTION ASSIGNED( VARREF ) : BOOLEAN;
Resultado:
• TRUE si la variable VARREF está definida y asignada
• FALSE si no está definida o no está asignada.
Parámetros: VARREF (Parámetro de Entrada). Referencia a una variable (nombre de la variable), o a
un elemento de la variable si ésta es un array.
A.9.2 DEFINED Descripción: Comprueba si una variable está definida.
Definición: FUNCTION DEFINED( VARREF ) : BOOLEAN;
Resultado:
• TRUE si la variable VARREF está definida
• FALSE si no está definida.
Parámetros: VARREF (Parámetro de Entrada). Referencia a una variable (nombre de la variable), o a
un elemento de la variable si ésta es un array.
A.9.3 EXIST Descripción: Comprueba si una variable está definida, y tiene un valor asignado.
Definición:
© 2013 Tango/04 Computing Group Página 47
Apéndice A : Funciones en ALEV Script v1.5
• FUNCTION EXIST( VARREF ) : BOOLEAN;
• FUNCTION ASSIGNED( VARREF ) : BOOLEAN;
Resultado:
• TRUE si la variable VARREF está definida y asignada
• FALSE si no está definida o no está asignada.
Parámetros: VARREF (Parámetro de Entrada). Referencia a una variable (nombre de la variable), o a
un elemento de la variable si ésta es un array.
A.9.4 ISBLANK Descripción: Comprueba si un valor de tipo string contiene únicamente blancos (espacios).
Definición: FUNCTION ISBLANK( S STRING ) : BOOLEAN;
Resultado:
• TRUE si S contiene únicamente blancos.
• FALSE .en caso contrario.
Parámetros: S (Parámetro de Entrada). El valor que se desea comprobar.
A.9.5 ISNULL Descripción: Retorna TRUE si el valor V está asignado (es decir, V <> NULL), en caso contrario
devuelve FALSE.
Definición: FUNCTION ISNULL( V VARIANT ) : BOOLEAN
Resultado:
• TRUE si V está asignado
• FALSE en caso contrario.
Parámetros: V: El valor que desea probar.
A.9.6 ISNUM Descripción: Comprueba si un valor de tipo string es una representación válida de un valor numérico
(INTEGER o REAL).
Definición: FUNCTION ISNUM( S STRING ) : BOOLEAN;
Resultado:
• TRUE si S representa un número.
• FALSE .en caso contrario.
Parámetros: S (Parámetro de Entrada). El valor que se desea comprobar.
A.9.7 ISZERO Descripción: Comprueba si un valor numérico (INTEGER o REAL) es cero.
Definición: FUNCTION ISZERO( N REAL ) : BOOLEAN;
Resultado:
© 2013 Tango/04 Computing Group Página 48
Apéndice A : Funciones en ALEV Script v1.5
• TRUE si N es cero.
• FALSE .en caso contrario.
Parámetros: S (Parámetro de Entrada). El valor que se desea comprobar.
A.9.8 TYPENAME Descripción: Devuelve un string con el tipo del valor indicado.
Definición: FUNCTION TYPENAME( V VARIANT ) : STRING;
Resultado: STRING El tipo de V.
Parámetros: V (Parámetro de Entrada). El valor del cual se desea obtener el tipo.
© 2013 Tango/04 Computing Group Página 49
Apéndice B : Sintáxis
Apéndice B Apéndice B: Sintáxis
Se indican en negrita y entre comillas simples ‘ todos los terminales o palabras clave. Los símbolos no
terminales se muestran entre los símbolos ‘<’ ‘>’. Los símbolos ‘[‘... ‘]’ indican que la secuencia
contenida es opcional. El símbolo | indica que los símbolos separados son opcionales, y equivale a la
operación lógica OR. El símbolo + indica que los símbolos separados son adicionales, y equivale a la
operación lógica AND.
• <Letra> = ‘A’ | ’B’ | ...’Z’|'&'
• <Digito> = ‘0’ | ‘1’ | ...’9’
• <Expresión Valida> = ( <Asignación> | <Expresión> ) + [ ‘;’ + [<Expresión Valida>] ]
• <Asignación> = <Variable> + ‘:=’ + <Expresión>
• <Variable> = <Identificador>
• <Expresión> = <Expresión Simple> + [ ( '=' | '<>' | '>' | '>=' | '<' | '<=' ) + <Expresión Simple> ]
• <Expresión Simple> = <Termino> + [ ( '+' | '-' | 'OR' ) + <Termino> ]
• <Termino> = <Factor> + [ ( '' | '/' | ‘^’ | 'DIV' | 'MOD' | 'AND' | ‘IN’ | 'LIKE' | 'MATCH' ) + <Factor> ]
• <Factor> = <Valor> | ( ( '+' | '-' ) +<Factor>) | ( 'NOT' + <Factor> )
• <Valor> = <Constante> | <Identificador> | <Llamada Función> | '('+ <Expresión> +')'
• <Constante> = ‘PI’ | <Entero> | <Real> | <String> | <Booleano> | <Fecha y Hora> | <Set> |
<Array>
• <Entero> = <Digito> + [ <Digito> ]
• <Real> = <Entero> + [<Separador Decimal> + <Entero>] + [‘E’ + [‘+’ | ‘-‘] + <Entero>]
• <String> = 'BLANK' | (‘’’ + [ <Caracter> ] + ‘’’) | (‘"’ + [ <Caracter> ] + ‘"’)
• <Booleano> = ‘TRUE’ | ‘FALSE’
• <Fecha y Hora> = ‘#’ + <Cadena de fecha y hora> ‘#’
• <Set> = '{' + ( [<Expresión>] | [<Rango>] ) + '}'
• <Array> = '[' + [ <Expresión> | ( <Clave> + ':' + <Expresión> ) + [ ',' + <Expresión> | ( <Clave> +
':' + <Expresión> ) ] ] + ']'
• <Identificador> = <Letra> + [ <Letra> | <Digito> | ‘_’ ] + [ < Indice> ]
© 2013 Tango/04 Computing Group Página 50
Apéndice B : Sintáxis
• <Rango> = <Valor> + '..' + <Valor>
• <Índice> = ( <Estilo 1> | <Estilo 2> )
• <Estilo1> = '[' + <Expresión> + [ ',' + <Expresión> ] + ']'
• <Estilo2> = '[' + <Expresión> + ']' + [ '[' + <Expresión> + ']' ]
• <Clave> = <Expresión>
• <Llamad Función> = <Identificador de Función> + '(' + [ <Lista de Argumentos> ] + ')'
• <Lista de Argumentos> = <Expresión> + [ ',' + <Expresión> ]
© 2013 Tango/04 Computing Group Página 51
Apéndice C : Contactar con Tango/04
Apéndice CApéndice C: Contactar con Tango/04
North America
Tango/04 North America
PO Box 3301
NH 03458 Peterborough USA
Phone: 1-800-304-6872 / 603-924-7391
Fax: 858-428-2864
www.tango04.com
EMEA
Tango/04 Computing Group S.L.
Avda. Meridiana 358, 5 A-B
08027 Barcelona Spain
Phone: +34 93 274 0051
Fax: +34 93 345 1329
www.tango04.com
Italy
Tango/04 Italy
Viale Garibaldi 51/53
13100 Vercelli Italy
Phone: +39 0161 56922
Fax: +39 0161 259277
www.tango04.it
Sales Office in France
Tango/04 France
La Grande Arche
Paroi Nord 15ème étage
92044 Paris La Défense France
Phone: +33 01 40 90 34 49
Fax: +33 01 40 90 31 01
www.tango04.fr
Sales Office in Switzerland
Tango/04 Switzerland
18, Avenue Louis Casaï
CH-1209 Genève
Switzerland
Phone: +41 (0)22 747 7866
Fax: +41 (0)22 747 7999
www.tango04.fr
Latin American Headquarters
Barcelona/04 Computing Group SRL (Argentina)
Avda. Federico Lacroze 2252, Piso 6
1426 Buenos Aires Capital Federal
Argentina
Phone: +54 11 4774-0112
Fax: +54 11 4773-9163
www.barcelona04.com
© 2013 Tango/04 Computing Group Página 52
Apéndice C : Contactar con Tango/04
Sales Office in Peru
Barcelona/04 PERÚ
Centro Empresarial Real
Av. Víctor A. Belaúnde 147, Vía Principal 140 Edificio Real Seis, Piso 6
L 27 Lima
Perú
Phone: +51 1 211-2690
Fax: +51 1 211-2526
www.barcelona04.com
Sales Office in Chile
Barcelona/04 Chile
Nueva de Lyon 096 Oficina 702,
Providencia
Santiago
Chile
Phone: +56 2 234-0898
Fax: +56 2 2340865
www.barcelona04.com
© 2013 Tango/04Computing Group Página 53
Acerca de Tango/04 Computing Group
Acerca de Tango/04 Computing Group
Tango/04 Computing Group es una de las principales empresas desarrolladoras de software de gestión
y automatización de sistemas informáticos. El software de Tango/04 ayuda a las empresas a mantener
la salud operativa de sus procesos de negocio, mejorar sus niveles de servicio, incrementar su
productividad y reducir costes mediante una gestión inteligente de su infraestructura informática.
Fundada en 1991 en Barcelona, Tango/04 es IBM Business Partner y miembro de la iniciativa
estratégica IBM Autonomic Computing. Además de recibir numerosos reconocimientos de la industria,
las soluciones Tango/04 han sido validadas por IBM y tienen la designación IBM ServerProven™.
Tango/04 tiene más de mil clientes y mantiene operaciones en todo el mundo a través de una red de 35
Business Partners
Alianzas
Premios
Partnerships IBM Business Partner
IBM Autonomic Computing Business Partner
IBM PartnerWorld for Developers Advanced Membership
IBM ISV Advantage Agreement
IBM Early code release
IBM Direct Technical Liaison
Microsoft Developer Network
Microsoft Early Code Release
© 2013 Tango/04 Computing Group Página 54
Aviso Legal
Aviso Legal
Este documento y su contenido son propiedad de Tango/04 Computing Group o de sus respectivos propietarios cuando así se
indique. Cualquier utilización de este documento con una finalidad distinta de aquella con la cual ha sido creado está prohibida sin la
autorización expresa de su propietario. Asimismo queda prohibida la reproducción total o parcial de este documento por cualquier
medio físico, óptico, magnético, impreso, telemático, etc., sin la autorización expresa de su propietario.
La información técnica aquí contenida fue obtenida utilizando equipamiento e instalaciones específicas, y su aplicación se limita a
esas combinaciones especiales de productos y niveles de versiones de hardware y software. Cualquier referencia en este documento
a productos, software o servicios de Tango/04 Computing Group, no implica que Tango/04 Computing Group planee introducir esos
productos, software o servicios en cada uno de los países en los que opera o está representada. Cualquier referencia a productos de
software, hardware o servicios de Tango/04 Computing Group no está hecha con el propósito de expresar que solamente pueden
utilizarse productos o servicios de Tango/04 Computing Group. Cualquier producto o servicio funcionalmente equivalente que no
infrinja la propiedad intelectual o condiciones de licenciamiento específicas se podría utilizar en reemplazo de productos, software o
servicios de Tango/04 Computing Group.
Tango/04 Computing Group puede tener patentes o estar pendiente de obtención de patentes que cubren asuntos tratados en este
documento. La entrega de este documento no otorga ninguna licencia de esas patentes. La información contenida en este
documento no ha sido sometida a ningún test formal por Tango/04 Computing Group y se distribuye tal como está. El uso de esta
información o la implementación de cualquiera de las técnicas, productos, tecnologías, ideas o servicios explicitados o sugeridos por
el presente documento es responsabilidad exclusiva del cliente a quien está dirigido este documento, y es el cliente quien debe
evaluar y determinar la aplicabilidad y consecuencias de integrar esas técnicas, productos, tecnologías, ideas o servicios en su
entorno operativo.
Si bien cada ítem puede haber sido revisado por Tango/04 Computing Group en cuanto a su exactitud en una situación específica, no
existe ni se otorga ninguna garantía de que los mismos o similares resultados puedan ser obtenidos en otras situaciones o
instalaciones. Los clientes que intenten adaptar esas técnicas en sus propias instalaciones lo hacen bajo su propia cuenta,
responsabilidad y riesgo. Tango/04 Computing Group no será en ningún caso responsable directo o indirecto de cualquier daño o
perjuicio causado por el uso de las técnicas explicitadas o sugeridas en este documento, incluso si se han efectuado notificaciones
de la posibilidad de esos daños.
Este documento puede contener errores técnicos y/o errores tipográficos. Todas las referencias en esta publicación a entidades
externas o sitios web han sido provistas para su comodidad solamente, y en ningún caso implican una validación, garantía o respaldo
a esas entidades o sitios.
Las marcas siguientes son propiedad de International Business Machines Corporation en los Estados Unidos y/o otros países: AS/
400, AS/400e, System i, iSeries, e (logo)Server, i5, Operating System/400, OS/400, i5/OS.
Microsoft, SQL Server, Windows, Windows NT, Windows XP y el logotipo de Windows son marcas registradas de Microsoft
Corporation en los Estados Unidos y/o otros países. Java y todos los logotipos y marcas basadas en Java son propiedad de Sun
Microsystems, Inc. en los Estados Unidos y otros países. UNIX es una marca registrada en los Estados Unidos y otros países y se
licencia exclusivamente a través de The Open Group. Oracle es una marca registrada de Oracle Corporation. Otras marcas,
productos o servicios pueden ser marcas registradas de otras empresas.
© 2013 Tango/04 Computing Group Página 55
Top Related