Zu Hauptinhalt springen Zu ergänzendem Inhalt springen

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:  

Argumente
ArgumentBeschreibung
varEine 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.

InformationshinweisDa 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 mask

 

Argumente
ArgumentBeschreibung
constantBeliebige 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.
expressionEine beliebige Formel.
mask

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

Sie können absolute Dateipfade oder lib://-Pfade verwenden.

conditionEine logische Formel, die True oder False ergibt.
statementsJede Gruppe von einem oder mehreren Qlik Sense-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 maskDiese Syntax durchläuft die Werte eines Felds, das bereits in Qlik Sense geladen wurde.
WarnhinweisQlik Konnektoren für Webspeicher-Anbieter und andere DataFiles-Verbindungen unterstützen keine Filtermasken, die Platzhalterzeichen (* und ?) enthalten.

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

In diesem Beispiel wird eine Liste aller relevanten Qlik Sense-Dateien in einen Ordner 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')

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:

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

Weitere Informationen

 

Hat diese Seite Ihnen geholfen?

Wenn Sie Probleme mit dieser Seite oder ihren Inhalten feststellen – einen Tippfehler, einen fehlenden Schritt oder einen technischen Fehler –, teilen Sie uns bitte mit, wie wir uns verbessern können!