For each..next

Instrukcja sterowania for each..next to rodzaj iteracji skryptu służący do wykonania co najmniej jednej instrukcji dla każdej wartości na liście rozdzielonej przecinkami. Dla każdej wartości na liście wykonane zostaną instrukcje wewnątrz pętli między argumentami for i next.

Syntax:  

Dzięki specjalnej składni możliwe jest generowanie list z nazwami plików i katalogów w katalogu bieżącym.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

Argument Opis
var Nazwa zmiennej skryptu pobierającej nową wartość z listy dla każdego wykonania pętli. Jeśli argument var określono po argumencie next, musi on mieć taką samą nazwę zmiennej jak nazwa po for each.

Wartość zmiennej var można zmienić przy użyciu instrukcji wewnątrz pętli, ale nie jest to zalecana praktyka programowania.

Jeśli wewnątrz pętli napotkana zostanie klauzula exit for, wykonanie skryptu zostanie przeniesione do pierwszej instrukcji po klauzuli next wskazującej na koniec pętli. Klauzula exit for może zostać ustawiona jako warunkowa przez opcjonalne użycie sufiksu when lub unless.

Uwaga: Instrukcja for each..next jest instrukcją sterowania i jako taka kończy się średnikiem lub symbolem końca linii, żadna z jej trzech możliwych klauzul (for each,exit for i next) nie może zatem wykraczać poza granicę linii.

Syntax:  

list := item { , item }

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

 

Argument Opis
constant Dowolna liczba lub ciąg znaków. Należy pamiętać, że ciąg znaków wpisany bezpośrednio w skrypt musi być ujęty w pojedyncze cudzysłowy. Ciąg znaków bez pojedynczych cudzysłowów zostanie zinterpretowany jako zmienna i będzie użyta wartość zmiennej. Liczb nie trzeba ujmować w pojedyncze cudzysłowy.
expression Dowolne wyrażenie.
mask

Maska nazwy pliku lub folderu, która może zawierać dowolne znaki dozwolone w nazwie pliku, a także standardowe symbole wieloznaczne, na przykład * i ?.

Można używać bezwzględnych ścieżek do plików lub ścieżek lib://.

condition Wyrażenie logiczne, którego ocena zwraca True lub False.
statements Dowolna grupa zawierająca co najmniej jedną instrukcję skryptu Qlik Sense.
filelist mask

Składnia tworzy rozdzieloną przecinkami listę wszystkich plików w bieżącym katalogu zgodnym z maską nazwy pliku.

Uwaga: Ten argument obsługuje tylko połączenia bibliotek w trybie standardowym. Zob. Ograniczenie dostępu do systemu plików
dirlist mask

Składnia tworzy rozdzieloną przecinkami listę wszystkich folderów w bieżącym folderze zgodnym z maską nazwy folderu.

Uwaga: Ten argument obsługuje tylko połączenia bibliotek w trybie standardowym. Zob. Ograniczenie dostępu do systemu plików
fieldvaluelist mask Ta składnia jest iterowana przez wartości pola już załadowane do aplikacji Qlik Sense.

Example 1: Ładowanie listy plików

// 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: Tworzenie listy plików na dysku

W tym przykładzie ładowana jest lista wszystkich plików powiązanych z aplikacją Qlik Sense w folderze.

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: Iteracja przez wartości pola

W tym przykładzie iteracja przeprowadzana jest przez listę załadowanych wartości FIELD i generowane jest nowe pole, NEWFIELD. Dla każdej wartości FIELD utworzone zostaną dwa rekordy NEWFIELD.

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

Otrzymana tabela wygląda następująco:

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