Saltar al contenido principal Saltar al contenido complementario

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.

Sintaxis:  

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]

Argumentos:  

Argumentos
ArgumentoDescripción
varEs 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 informativaDado 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.

Sintaxis:  

list := item { , item }

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

 

Argumentos
ArgumentoDescripción
constantEs 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.
expressionEs 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://.

conditionUna expresión lógica que devuelve True o False.
statementsEs 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.

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 maskEsta sintaxis se repite a lo largo de los valores de un campo ya cargado en Qlik Sense.
Nota de avisoEl Qlik Conectores de proveedores de almacenamiento web y otras conexiones de DataFiles no admiten máscaras de filtro que usen los caracteres comodín (* y ?).

Ejemplo 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

Ejemplo 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://DataFiles')

Ejemplo 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:

Example table
NEWFIELD
one-1
one-2
two-1
two-2
three-1
three-2

Más información

 

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.