Estructure el c贸digo FPScript de su f贸rmula en forma de una o varias instrucciones. Normalmente se escribe cada instrucci贸n en una l铆nea separada. Sin embargo, tambi茅n puede escribir varias instrucciones en la misma l铆nea. Simplemente debe separarlos con un punto y coma ";". Tambi茅n es posible dividir una instrucci贸n en varias l铆neas. Para las l铆neas que deban resumirse con sus l铆neas subsiguientes, debe introducir una barra invertida "\" o un car谩cter de subrayado "_" como 煤ltimo car谩cter.
Asignaci贸n
Puede asignar un contenido diferente a una variable mediante una asignaci贸n. En una variable que contenga una serie de datos, por ejemplo, puede utilizar la asignaci贸n indexada para sobrescribir valores escalares o rangos. Puede utilizar la instrucci贸n Set o la palabra clave As Object para asignar una referencia de objeto a una variable. A continuaci贸n, puede utilizar esta variable para acceder a las propiedades del objeto referenciado.
Tomar decisiones con If...Then...Else
La instrucci贸n If...Then...Else se utiliza para comprobar si una condici贸n tiene el valor TRUE o FALSE con el fin de ejecutar una o varias instrucciones en funci贸n de ello. Normalmente, la condici贸n es una expresi贸n con un operador de comparaci贸n para comparar dos variables o valores. Encontrar谩 informaci贸n sobre los operadores de comparaci贸n en Operadores de comparaci贸n. Las instrucciones If...Then...Elsepueden anidarse a cualquier profundidad.
Ejecuci贸n de un bloque si una condici贸n resulta TRUE
En este caso, se omite la palabra clave Else:
If聽valor聽>聽2聽Then
聽聽聽聽Valor聽=聽5
End
Ejecuci贸n de un bloque si una condici贸n resulta TRUE y de otro si la condici贸n resulta FALSE
Las instrucciones que se deben ejecutar si la condici贸n resulta FALSE se insertan entre las palabras clave Else y End.
If聽valor聽>聽2聽Then
聽聽聽聽Valor聽=聽5
Else
聽聽聽聽Valor聽=聽0
End
Uso de bucles para repetir c贸digo
FPScript le ofrece una amplia gama de operaciones para buscar eventos y procesar conjuntos de datos en su totalidad. En raras ocasiones, sin embargo, necesitar谩 bucles, por ejemplo, para recorrer los valores de una serie de datos. En un bucle, normalmente se define una variable de bucle que enumera las repeticiones. A continuaci贸n, puede utilizar esta variable en una operaci贸n de 铆ndice, por ejemplo, para acceder al valor correspondiente de un conjunto de datos:
//聽Declarar聽variable
Dim聽resultado
//聽Copiar聽serie聽de聽datos聽que聽se聽va聽a聽calcular
Resultado聽=聽serie聽de聽datos
//聽Recorrer聽todos聽los聽valores聽de聽la聽serie聽de聽datos
For聽Each聽Row聽i聽en聽serie聽de聽datos聽Do
//聽Poner聽a聽cero聽los聽valores聽inferiores聽a聽cero聽en聽el聽resultado
聽聽聽聽If聽series聽de聽datos[i]聽<聽0聽Then
聽聽聽聽聽聽聽聽Resultado[i]聽=聽0
聽聽聽聽End
End
Return聽resultado聽//聽transferir聽la聽serie聽de聽datos聽del聽resultado
El ejemplo anterior utiliza un bucle para encontrar valores negativos en una serie de datos y establecerlos en el valor cero. Todas las sentencias entre Do y End se ejecutan varias veces, con la variable i contando desde 0 hasta el n煤mero de valores de la serie de datos menos 1. El ejemplo tambi茅n muestra una instrucci贸n condicional. La instrucci贸n Resultado[i] = 0. solo se ejecuta si el valor i-茅simo de la serie de datos es menor que cero. En el ejemplo tambi茅n se puede observar c贸mo los programas FPScript pueden hacerse m谩s legibles mediante sangr铆as. Todas las instrucciones del bucle se han sangrado una posici贸n de tabulaci贸n. Lo mismo ocurre con la declaraci贸n condicional.
Nota聽 Solo debe utilizar bucles en los casos en que no exista una funci贸n adecuada y el problema no pueda describirse como una expresi贸n aritm茅tica. Las funciones incorporadas de FlexPro son muchas veces m谩s r谩pidas que los bucles que se programan con FPScript. El ejemplo anterior puede reescribirse como sigue:
Dim聽resultado,聽Idx聽聽聽聽聽聽聽聽//聽declarar聽variable
Resultado聽=聽Serie聽de聽datos聽聽聽聽//聽copiar聽serie聽de聽datos聽que聽se聽va聽a聽calcular
//聽Determinar聽posiciones聽de聽todos聽los聽valores聽<聽0
Idx聽=聽ValuesAboveLevel(serie聽de聽datos,聽0,聽EVENT_INDEX聽+聽EVENT_COMPLEMENT)聽聽
//聽Poner聽a聽cero聽los聽valores聽en聽estas聽posiciones聽en聽el聽resultado
Resultado[Idx]聽=聽0
Return聽resultado聽聽聽聽聽聽聽聽聽聽//聽transferir聽la聽serie聽de聽datos聽del聽resultado
Puede cancelar un bucle prematuramente utilizando la instrucci贸n Break:
Dim聽resultado聽=聽0
For聽Each聽Value聽v聽en聽serie聽de聽datos聽Do
聽聽聽聽If聽v聽==聽?聽Then
聽聽聽聽聽聽聽聽Break
聽聽聽聽End
聽聽聽聽Resultado聽=聽resultado聽+聽v
End
Return聽resultado
FPScript le proporciona los siguientes bucles:
While...End: ejecuta un bucle mientras una condici贸n tenga como resultado el valor TRUE.
Do...While: ejecuta un bucle hasta que una condici贸n devuelve el valor FALSE.
For...End: utiliza un contador para repetir las instrucciones tantas veces como especifique el contador.
For Each Value...End: recorre todos los valores de un conjunto de datos. No se utiliza contador.
For Each Element...End: utiliza un contador para contar todos los elementos de una lista.
For Each Row...End: utiliza un contador para contar todas las filas de una serie de datos o una matriz de datos.
For Each Column...End: utiliza un contador para contar todas las columnas de una matriz de datos.
Repetici贸n de instrucciones mientras una condici贸n tenga el valor TRUE
El bucle While...End comprueba primero la condici贸n y luego ejecuta las instrucciones mientras la condici贸n sea TRUE. El siguiente ejemplo busca la posici贸n en el conjunto de datos a partir de la cual se produce el primer valor positivo.
i聽=聽0
While聽conjunto聽datos[i]聽<聽0聽Do
聽聽聽聽i聽=聽i聽+聽1
End
Repetici贸n de instrucciones hasta que una condici贸n tenga el valor TRUE
El bucle Do...While ejecuta la instrucci贸n una primera vez y luego comprueba la condici贸n. El siguiente ejemplo calcula n煤meros aleatorios hasta que se genera un n煤mero mayor o igual que cero.
Dim聽Z
Do
聽聽聽聽Z聽=聽Noise(0)
While聽Z聽<聽0
Uso de "For...End"
Con las instrucciones For...End, puede repetir un bloque de instrucciones tantas veces como se especifique. Para los bucles, utilice una variable de contador cuyo valor se incremente con cada bucle completado.
Dim聽a聽=聽""聽#聽3
For聽i聽=聽0聽To聽2聽Do
聽聽聽聽a[i]聽=聽TextInput("Introduzca聽un聽texto")
End
Uso de "For Each Row...End"
Si, como en el ejemplo anterior, debe iterarse sobre todos los elementos de un conjunto de datos, esto se puede implementar de forma m谩s elegante con el bucle For Each Row...End:
Dim聽a聽=聽""聽#聽Input("n煤mero")
For聽Each聽Row聽i聽In聽a聽Do
聽聽聽聽a[i]聽=聽TextInput("Introduzca聽un聽texto")
End