For each..next

L'instruction de contrôle for each..next est une construction d'itération de script qui exécute une ou plusieurs instructions pour chaque valeur d'une liste de valeurs séparées par des virgules. Les instructions comprises entre for et next à l'intérieur de la boucle sont exécutées pour chaque valeur de la liste.

Syntax:  

Une syntaxe spéciale permet de générer des listes comprenant les noms des fichiers et des répertoires contenus dans le répertoire actif.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

Argument Description
var Nom de variable de script qui prendra une nouvelle valeur à partir de la liste lors de chaque exécution de la boucle. Si l'argument var est spécifié après next, il doit s'agir du même nom de variable que celui qui se trouve après le for each correspondant.

Il est possible de modifier la valeur de la variable var à l'aide d'instructions placées à l'intérieur de la boucle, mais ce n'est pas une bonne méthode de programmation.

Si une clause exit for se trouve dans la boucle, l'exécution du script est transférée à la première instruction qui suit la clause next indiquant la fin de la boucle. Il est possible de rendre une clause exit for conditionnelle par l'utilisation facultative d'un suffixe when ou unless.

Remarque: Comme l'instruction for each..next est une instruction de contrôle et, en tant que telle, se termine par un point-virgule ou une fin de ligne, aucune de ses trois clauses possibles (for each,exit for et next) ne peut s'étendre sur plusieurs lignes.

Syntax:  

list := item { , item }

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

 

Argument Description
constant Tout nombre ou toute chaîne. Veuillez noter qu'une chaîne écrite directement dans le script doit être placée entre guillemets simples. Une chaîne non mise entre guillemets simples est interprétée comme une variable ; la valeur de la variable lui est ensuite appliquée. Il est inutile de placer les nombres entre guillemets simples.
expression Expression arbitraire.
mask

Masque de nom de fichier ou de dossier pouvant inclure n'importe quel caractère de nom de fichier valide, ainsi que les caractères génériques standard, * et ?.

Vous pouvez utiliser des chemins d'accès absolus ou des chemins d'accès lib://.

condition Expression logique dont l'évaluation a pour résultat True ou False.
statements Tout groupe d'une ou plusieurs instructions de script Qlik Sense.
filelist mask

Cette syntaxe génère une liste de tous les fichiers, séparés par des virgules, qui se trouvent dans le répertoire actif et qui correspondent au masque de nom de fichier.

Remarque: Cet argument prend uniquement en charge les connexions aux bibliothèques en mode standard. Voir Restrictions d'accès au système de fichiers
dirlist mask

Cette syntaxe génère une liste de tous les dossiers, séparés par des virgules, qui se trouvent dans le dossier actif et qui correspondent au masque de nom de dossier.

Remarque: Cet argument prend uniquement en charge les connexions aux bibliothèques en mode standard. Voir Restrictions d'accès au système de fichiers
fieldvaluelist mask Cette syntaxe itère au sein des valeurs d'un champ déjà chargé dans Qlik Sense.

Example 1: Chargement d'une liste de fichiers

// 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: Création d'une liste de fichiers sur un disque

Dans cet exemple, la liste de tous les fichiers relatifs à Qlik Sense sont chargés dans un dossier.

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: Itération au sein des valeurs d'un champ

Cet exemple itère au sein de la liste des valeurs chargées de champ FIELD et génère un nouveau champ, NEWFIELD. Pour chaque valeur de FIELD, deux enregistrements NEWFIELD sont créés.

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

La table résultante a l'aspect suivant :

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