QlikWorld 2020 Global Conference. Join us to discover how to get the most from your data. Act fast. Register now and save.

For each..next

La sentencia de control for each..next crea un bucle que ejecuta una o varias sentencias para cada valor en una lista separada por comas. Las sentencias que están dentro del bucle, entre for y next se ejecutarán con 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 deberá tener el mismo nombre de variable que el encontrado después del for each correspondiente.

El valor de la variable var puede ser modificado por 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 será transferida a la primera sentencia tras la cláusula next que indica el final del bucle. Una cláusula exit for puede hacerse condicional mediante el uso opcional de un sufijo when o unless.

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

Syntax:  

list := item { , item }

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

 

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

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

condition Es una expresión lógica que se evalúa como True o False.
statements Es cualquier grupo de una o varias sentencias de script de QlikView.
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.

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.

fieldvaluelist mask Esta sintaxis se repite a lo largo de los valores de un campo ya cargado en QlikView.

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 QlikView relacionados en una carpeta.

sub DoDir (Root) for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', '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 ('C:')

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

Este ejemplo se repite a lo largo de la lista de valores cargados de FIELD y genera un campo nuevo, NEWFIELD. Para cada valor de FIELD, se crearán dos registros de NEWFIELD.

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