Repite una serie de instrucciones para todas las filas de un conjunto de datos.
Sintaxis
For Each Row Contador In ConjuntoDeDatos Do
[Instrucciones]
End
La sintaxis de la instrucción For Each Row...End consta de las siguientes partes:
Parte |
Descripción |
|---|---|
Contador |
Variable que se utiliza como contador de bucles. No es necesario declarar el contador de bucles con Dim. |
ConjuntoDeDatos |
El conjunto de datos cuyos valores deben contarse. El conjunto de datos no debe ser un valor escalar. |
Instrucciones |
Una o varias sentencias que se ejecutan para cada valor de ConjuntoDeDatos. |
Notas
El bloque For Each Row se ejecuta si hay al menos un valor en ConjuntoDeDatos. En este caso, el programa ejecuta todas las instrucciones del bucle con Contador igual a cero. El bucle se repite para todos los valores del ConjuntoDeDatos, y el Contador va tomando los valores desde cero hasta el número de valores menos uno. A continuación, el programa sale del bucle y continúa la ejecución con la instrucción que sigue a la instrucción End.
Si desea iterar todos los valores de una matriz de datos o una serie de señales, debe incrustar el bucle For Each Row...End en un bucle For Each Column...End, que cuente las columnas. Utilice un nombre de variable único como Contador para cada bucle.
Puede cambiar el valor de Contador dentro de un bucle, pero esto hace más difícil entender y probar el código.
El contador se utiliza a menudo dentro del bucle para indexar un valor del ConjuntoDeDatos.
Nota En la medida de lo posible, evite los bucles sobre valores individuales de un conjunto de datos. FPScript le ofrece la posibilidad de calcular conjuntos de datos completos en una sola instrucción. Por lo general, los bucles pueden sustituirse por funciones de aislamiento de eventos junto con el operador de índice. El bucle For Each Value...End es el bucle FPScript más rápido.
Disponibilidad
FlexPro View, Basic, Professional, Developer Suite
Ejemplo
El siguiente ejemplo establece todos los valores de una señal que sean superiores a 5.0 en el valor 5.0:
Arguments Signal
For Each Row i In Signal Do
If Signal.Y[i] >= 5 Then
Signal.Y[i] = 5
End
End
Signal
El ejemplo anterior puede escribirse de forma mucho más sencilla y eficiente utilizando el aislamiento de eventos:
Arguments Signal
Signal.Y[ValuesAboveLevel(Signal, 5)] = 5
Signal
Esta variante también puede simplificarse aún más, ya que existe una función Clip incorporada que realiza la operación deseada:
Arguments Signal
Clip(Signal, , 5)
Véase también
Instrucción For Each Column...End
Instrucción For Each Element...End