Przeskocz do zawartości głównej Przejdź do treści uzupełniającej

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.

Składnia:  

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]

Argumenty:  

Argumenty
ArgumentOpis
varNazwa 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.

InformacjaInstrukcja 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.

Składnia:  

list := item { , item }

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

 

Argumenty
ArgumentOpis
constantDowolna 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.
expressionDowolne 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://.

conditionWyrażenie logiczne, którego ocena zwraca True lub False.
statementsDowolna 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.

dirlist mask

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

fieldvaluelist maskTa składnia jest iterowana przez wartości pola już załadowane do aplikacji Qlik Sense.
OstrzeżeniePołączenia z Qlik Łączniki do dostawcy magazynowania w sieci Web i inne połączenia DataFiles nie obsługują masek filtrów, które używają symboli wieloznacznych (* i ?).

Przykład 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

Przykład 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://DataFiles')

Przykład 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

Wynikowa tabela wygląda następująco:

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

Dowiedz się więcej

 

Czy ta strona była pomocna?

Jeżeli natkniesz się na problemy z tą stroną lub jej zawartością — literówkę, brakujący krok lub błąd techniczny — daj nam znać, co możemy poprawić!