Repite una serie de instrucciones para todas las series de datos, es decir, columnas, de una matriz de datos o todas las señales de una serie de señales.
Sintaxis
[Parallel] For Each Column Contador In ConjuntoDeDatos Do
[Instrucciones]
End
La sintaxis de la instrucción For Each Column...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 |
Una matriz de datos o una serie de señales con las series de datos o señales que se van a iterar. |
Instrucciones |
Una o varias instrucciones que se ejecutan para cada serie de datos del ConjuntoDeDatos. |
Notas
El bloque For Each Column se ejecuta si al menos una serie de datos se encuentra en el conjunto de datos. En este caso, el programa ejecuta todas las instrucciones del bucle con un Contador igual a cero. El bucle se repite para todas las columnas del conjunto de datos, con el Contador tomando los valores de cero al número de columnas 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.
Puede cambiar el valor del 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 una serie de datos de la matriz de datos o una señal de la serie de señales.
Puede anidar bucles For...End, por ejemplo, colocando un bucle For Each Row...End dentro de un bucle ForEach Column...End. Utilice un nombre de variable único como Contador para cada bucle.
Si antepone la palabra clave Paralelo, las pasadas de bucle en las ediciones Professional y Developer Suite de FlexPro se ejecutan simultáneamente en lugar de uno tras otro. FlexPro distribuye entonces la ejecución a un máximo de tantos hilos ejecutándose simultáneamente como núcleos de procesador haya. Esto conlleva la correspondiente multiplicación de la velocidad de procesamiento, siempre que esta no se vea limitada por otros factores, como la recarga de grandes conjuntos de datos desde el disco duro.
La ejecución paralela tiene una serie de consecuencias que debe conocer:
•Se crea una instancia independiente para cada hilo para el contador de bucles y para las variables locales que declare dentro del bloque Parallel For Each Column. No se permite el acceso a dicha variable desde fuera del bloque.
•Una variable local que declara encima del bloque Parallel For Each Column será compartida por todos los hilos. Si escribe en una variable de este tipo dentro del bloque, su valor también cambia bruscamente para los demás hilos.
•Como el orden de las pasadas de bucle no está definido, no se pueden utilizar conceptos como la recogida de resultados individuales con el operador de agrupación. En su lugar, debe dimensionar suficientemente el resultado antes del bucle y, a continuación, introducir los resultados individuales utilizando la asignación indexada.
•La instrucción Break no está permitida en un bucle paralelo.
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 calcula el área bajo la curva para cada señal de una serie de señales y transfiere el resultado como serie de datos:
Arguments SignalSeries
Dim Result
For Each Column i In SignalSeries Do
Result := Integral(SignalSeries[i]).Y[-1n]
End
Result
Si el bucle se ejecuta en paralelo, debe utilizarse una asignación indexada en lugar del operador de concatenación:
Arguments SignalSeries
Dim Result = 0. # NumberOfColumns(SignalSeries)
Parallel For Each Column i In SignalSeries Do
Result[i] = Integral(SignalSeries[i]).Y[-1n]
End
Result
Véase también
Instrucción For Each Element...End
Instrucción For Each Row...End