For each..next

De besturingsopdracht for each..next is een herhalingsconstructie voor gebruik in scripts waarmee een of meer opdrachten worden uitgevoerd voor elke waarde in een door komma's gescheiden lijst. De opdrachten in de lus tussen for en next worden uitgevoerd voor elke waarde van de lijst.

Syntax:  

Door een speciale syntaxis kunnen lijsten worden gegenereerd met namen van bestanden en mappen in de huidige map.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

Argument Beschrijving
var De naam van een scriptvariabele die een nieuwe waarde uit de lijst ophaalt, telkens wanneer de lus wordt uitgevoerd. Als var wordt opgegeven na next moet de variabele dezelfde naam hebben als de variabele die wordt gevonden na de overeenkomende for each.

De waarde van de var kan worden gewijzigd door opdrachten binnen de lus. Dit is echter met het oog op de gebruikelijke manier van programmeren niet aan te raden.

Als een clausule exit for binnen de lus wordt aangetroffen, gaat de uitvoering van het script over op de eerste opdracht na de clausule next die het einde van de lus aangeeft. De clausule exit for kan voorwaardelijk worden gemaakt met het optionele suffix when of unless.

Opmerking: Omdat de instructie for each..next een besturingsopdracht is en dus wordt afgesloten door een puntkomma of het einde van een regel, mag geen van de drie mogelijke clausules ervan (for each, exit for en next) de regelgrens overschrijden.

Syntax:  

list := item { , item }

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

 

Argument Beschrijving
constant Elk getal of elke tekenreeks. Een tekenreeks die rechtstreeks in het script wordt opgenomen moet tussen enkele aanhalingstekens worden geplaatst. Een tekenreeks zonder enkele aanhalingstekens wordt geïnterpreteerd als een variabele en vervolgens wordt de waarde van de variabele gebruikt. Getallen hoeven niet tussen enkele aanhalingstekens te worden geplaatst.
expression Een willekeurige uitdrukking.
mask

Een masker voor de naam van een bestand of map die geldige tekens voor bestandsnamen plus de standaardjokertekens, * en ?, kan bevatten.

U kunt absolute bestandspaden of paden lib:// gebruiken.

condition Een logische uitdrukking die resulteert in True of False.
statements Een willekeurige groep van een of meer Qlik Sense-scriptopdrachten.
filelist mask

Deze syntaxis produceert een lijst met door komma's gescheiden namen van alle bestanden in de huidige map die overeenkomen met het bestandsnaammasker.

Opmerking: Dit argument ondersteunt alleen bibliotheekverbindingen in de standaardmodus. Zie Beperking van toegang tot bestandssysteem
dirlist mask

Deze syntaxis produceert een lijst met door komma's gescheiden namen van alle mappen in de huidige map die overeenkomen met het mapnaammasker.

Opmerking: Dit argument ondersteunt alleen bibliotheekverbindingen in de standaardmodus. Zie Beperking van toegang tot bestandssysteem
fieldvaluelist mask Deze syntaxis itereert door de waarden van een veld die al in Qlik Sense zijn geladen.

Example 1: Een lijst van bestanden laden

// 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: Een lijst van bestanden maken op schijf

Via dit voorbeeld wordt een lijst met alle aan Qlik Sense gerelateerde bestanden in een map geladen.

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')

Example 3: Itereren door de waarden van een veld

Dit voorbeeld itereert door de waarden van geladen waarden van FIELD en genereert een nieuw veld, NEWFIELD. Voor elke waarde van FIELD, worden twee NEWFIELD-records gemaakt.

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

De resulterende tabel ziet er als volgt uit:

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