Saltar navegación

Documentación de FlexPro 2025

Para cada columna...Fin

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

Instrucción For Each Value...End

Instrucción For...End

Instrucción While...End

Instrucción Do...While