Международная конференция QlikWorld 2020. Присоединяйтесь к нам, чтобы узнать, как получить максимальную пользу от ваших данных. Действуйте быстро. Зарегистрируйтесь сейчас и сэкономьте.

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 (fieldname)

 

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

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

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

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

dirlist mask

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

fieldvaluelist mask Этот синтаксис повторяется в значениях поля, которое уже загружено в QlikView.

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

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

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

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