For each..next

La sentencia de control for each..next es una construcción de iteración de script que ejecuta una o varias sentencias para cada valor en una lista separada por comas. Las sentencias dentro del bucle incluidas entre for y next se ejecutarán para cada valor de la lista.

Syntax:  

La sintaxis especial hace posible generar listas con los nombres de archivo y directorio en el directorio actual.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

Argumento Descripción
var Es un nombre de variable de script que adquirirá un nuevo valor de lista para cada ejecución del bucle. Si se especifica var después de next debe ser el mismo nombre de variable que el que se encuentra después del correspondiente for each.

El valor de la variable var se puede modificar mediante sentencias dentro del bucle, pero no es una buena práctica de programación.

Si se encuentra una cláusula exit for dentro del bucle, la ejecución del script se transferirá a la primera sentencia después de la cláusula next que denota el final del bucle. Una cláusula exit for puede volverse condicional mediante el uso opcional de un sufijo when o unless.

Nota: Dado que la sentencia for each..next es una sentencia de control y como tal finaliza con un punto y coma o un final de línea, cada una de sus tres posibles cláusulas (for each, exit for y next) no debe superar el límite de una línea.

Syntax:  

list := item { , item }

item := constant | (expression) | filelist mask | dirlist mask | fieldvaluelist mask

 

Argumento Descripción
constant Es cualquier número o cadena. Obsérvese que una cadena introducida directamente en el script debe ir entre comillas simples. Una cadena sin entrecomillado simple se interpretará como una variable y entonces se utilizará el valor de dicha variable. Los números no tienen que ir entre comillas simples.
expression Es una expresión cualquiera.
mask

Una máscara de nombre de archivo o carpeta que puede incluir cualquier carácter válido de nombre de archivo, así como los caracteres comodín estándar, * y ?.

Puede utilizar rutas de archivos absolutas o lib://.

condition Una expresión lógica que devuelve True o False.
statements Es cualquier grupo de una o varias sentencias de script de Qlik Sense.
filelist mask

Esta sintaxis produce una lista de todos los archivos incluidos en el directorio actual, separados por coma, que coincidan con la máscara de nombre de archivo.

Nota: Este argumento admite únicamente conexiones de biblioteca en modo estándar. Vea Restricción de acceso al sistema de archivos
dirlist mask

Esta sintaxis produce una lista con todas las carpetas de la carpeta actual (separadas por comas) que coincidan con la máscara de nombre de archivo.

Nota: Este argumento admite únicamente conexiones de biblioteca en modo estándar. Vea Restricción de acceso al sistema de archivos
fieldvaluelist mask Esta sintaxis se repite a lo largo de los valores de un campo ya cargado en Qlik Sense.

Example 1: Cargar una lista de archivos

// LOAD the files 1.csv, 3.csv, 7.csv and xyz.csv for each a in 1,3,7,'xyz' LOAD * from file$(a).csv; next

Example 2: Crear una lista de archivos en el disco

Este ejemplo carga una lista de todos los campos Qlik Sense relacionados en una carpeta.

sub DoDir (Root) for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvf', 'qvd' for each File in filelist (Root&'\*.' &Ext) LOAD '$(File)' as Name, FileSize( '$(File)' ) as Size, FileTime( '$(File)' ) as FileTime autogenerate 1; next File next Ext for each Dir in dirlist (Root&'\*' ) call DoDir (Dir) next Dir end sub call DoDir ('lib://MyData')

Example 3: Se repite a lo largo de los valores de un campo

Este ejemplo recorre toda la lista de valores cargados de FIELD y genera un nuevo campo, NEWFIELD. Por cada valor de FIELD, se crearán dos NEWFIELD registros.

load * inline [ FIELD one two three ]; FOR Each a in FieldValueList('FIELD') LOAD '$(a)' &'-'&RecNo() as NEWFIELD AutoGenerate 2; NEXT a

La tabla resultante tiene el siguiente aspecto:

NEWFIELD
one-1
one-2
two-1
two-2
three-1
three-2