For each..next

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

Синтаксис:  

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

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Аргументы:  

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

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

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

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

Синтаксис:  

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.

Пример 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

Пример 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:')

Пример 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

См. также: