For each..next

Der Steuerungsbefehl for each..next definiert eine Skriptiteration, die für jeden Wert in einer kommagetrennten Liste einen oder mehrere Befehle ausführt. Für jeden Wert der Liste werden die Befehle zwischen for und next einmal ausgeführt.

Syntax:  

Durch eine besondere Syntax ist es möglich, eine Liste mit Verzeichnis- und Dateinamen zu generieren.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Argumente:  

Argument Beschreibung
var Eine Skriptvariable, die bei jedem Durchlauf der Schleife den jeweils nächsten Wert in der Werteliste annimmt. Ist var nach next festgelegt, muss sie denselben Variablennamen haben, wie den hinter dem zugehörigen for each.

Der Wert von var kann durch Befehle innerhalb der Schleife geändert werden, dies ist aber nicht empfehlenswert.

Steht in der Schleife eine exit for-Bedingung, wird die Ausführung des Skripts beim ersten Befehl nach der Schleife, d. h. nach der Zeile mit dem abschließenden next, fortgesetzt. Auf exit for kann verzichtet werden, wenn stattdessen when oder unless verwendet wird.

Hinweis: Da for each..next zu den Steuerungsbefehlen gehört und mit einem Semikolon oder einer Zeilenschaltung abschließt, dürfen sich die einzelnen Befehlssequenzen (for each, exit for und next) nicht über mehrere Zeilen erstrecken.

Syntax:  

list := item { , item }

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

 

Argument Beschreibung
constant Beliebige Zahl oder String. Beachten Sie, dass ein direkt im Skript geschriebener String zwischen einfachen Anführungszeichen stehen muss. Ein String ohne einfache Anführungszeichen wird als Variable interpretiert. Anschließend wird der Wert der Variable verwendet. Zahlen müssen nicht zwischen einfachen Anführungszeichen stehen.
expression Eine beliebige Formel.
mask

Eine Vorgabe für Dateinamen bzw. Ordnernamen, die alle in Dateinamen zugelassenen Zeichen enthalten kann, sowie die Wildcards * und ?.

condition Eine logische Formel, die True oder False ergibt.
statements Jede Gruppe von einem oder mehreren QlikView-Skriptbefehlen.
filelist mask

Durch die Syntax wird eine kommagetrennte Liste aller Dateien im aktuellen Verzeichnis generiert, die der Dateinamenmaske entsprechen.

dirlist mask

Durch die Syntax wird eine kommagetrennte Liste aller Ordner im aktuellen Ordner generiert, die der Ordnernamenmaske entsprechen.

fieldvaluelist mask Diese Syntax aggregiert durch die Werte eines Felds, das bereits in QlikView geladen wurde.

Beispiel 1: Laden einer Liste von Dateien

// 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

Beispiel 2: Laden einer Dateiliste auf Speichermedium

Dieses Beispiel lädt eine Liste aller QlikView relevanten Dateien in einem Ordner.

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

Beispiel 3: Aggregierung nach den Werten eines Felds

In diesem Beispiel wird die Liste der geladenen Werte von FIELD aggregiert und ein neues Feld – NEWFIELD – erstellt. Für jeden Wert von FIELD werden zwei Datensätze NEWFIELD erstellt.

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

Die sich ergebende Tabelle sieht folgendermaßen aus:

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

Siehe auch: