For each..next

Оператор управления for each..next является компонентом итерации скрипта, который выполняет один или несколько операторов для каждого значения в списке, разделенном запятой. Операторы внутри цикла, заключенного с помощью for и next, выполняются для каждого значения списка.

Syntax:  

С помощью специального синтаксиса можно создавать списки с именами файлов и каталогов в текущем каталоге.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

Аргумент Описание
var Имя переменной скрипта, которое получает новое значение из списка для каждого выполнения цикла. Если переменная var задана после next, она должна иметь такое же имя переменной, как указано после соответствующего предложения for each.

Значение переменной var может быть изменено операторами внутри цикла, однако это делать не рекомендуется.

Если в цикле появляется предложение exit for, выполнение скрипта будет передано первому оператору после предложения next, указывающего на конец цикла. Предложение exit for можно сделать условным с помощью дополнительного использования суффикса when или unless.

Примечание: Поскольку оператор for each..next является оператором управления и заканчивается точкой с запятой или знаком конца строки, каждое из трех его возможных предложений (for each, exit for и next) не должно выходить за границу строки.

Syntax:  

list := item { , item }

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

 

Аргумент Описание
constant Любое число или строка. Обратите внимание на то, что строка, непосредственно записываемая в скрипте, должна быть заключена в одинарные кавычки. Строка без одинарных кавычек будет интерпретироваться как переменная с использованием значения переменной. Числа не нужно заключать в одинарные кавычки.
expression Произвольное выражение.
mask

Маска имени файла или папки, которая может включать в себя любые допустимые в имени файла символы и стандартные знаки подстановки, * и ?.

Можно использовать абсолютные пути к файлу или пути lib://.

condition Логическое выражение, имеющее значение True или False.
statements Любая группа, состоящая из одного или нескольких операторов скрипта Qlik Sense.
filelist mask

Такой синтаксис создает разделенный запятыми список всех файлов в текущем каталоге, соответствующих маске имени файла.

Примечание: Этот аргумент поддерживает только подключения к библиотеке в стандартном режиме. См. раздел Ограничение доступа к файловой системе
dirlist mask

Такой синтаксис создает разделенный запятыми список всех папок в текущей папке, соответствующей маске имени папки.

Примечание: Этот аргумент поддерживает только подключения к библиотеке в стандартном режиме. См. раздел Ограничение доступа к файловой системе
fieldvaluelist mask Этот синтаксис повторяется в значениях поля, которое уже загружено в Qlik Sense.

Example 1: Загрузка списка файлов

// 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: Создание списка файлов на диске

В этом примере показана загрузка всех файлов в папке, относящихся к программе Qlik Sense.

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: Повторяясь в значениях поля

Этот пример повторяется в списке загруженных значений элемента FIELD и создает новое поле NEWFIELD. Для каждого значения элемента FIELD необходимо создать две записи NEWFIELD.

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

Полученная таблица выглядит следующим образом:

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