For each..next

O comando de controle for each..next cria uma construção de iteração de script que executa um ou vários comandos para cada valor de uma lista separada por vírgulas. Os comandos dentro do loop incluídos entre for e next serão executados para cada valor da lista.

Syntax:  

A sintaxe especial permite gerar listas com nomes de arquivo e diretório no diretório atual.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Arguments:  

Argumento Descrição
var Um nome de uma variável de script que adquire um novo valor da lista para cada execução de referência de loop. Se var for especificado depois de next, ele deverá ter o mesmo nome de variável que a encontrada após o for each correspondente.

O valor da variável var pode ser alterado por comandos dentro da referência circular, entretanto, essa não é uma prática de programação recomendável.

Se uma cláusula exit for for encontrada dentro do loop, a execução do script será transferida para o primeiro comando após a cláusula next, indicando o fim do loop. Uma cláusula exit for pode ser transformada em condicional pelo uso opcional de um sufixo when ou unless.

Nota: Como o comando for each..next é um comando de controle e, portanto, termina com um ponto e vírgula ou com um fim de linha, cada uma das três cláusulas possíveis (for each,exit for e next) não deve ultrapassar o limite da linha.

Syntax:  

list := item { , item }

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

 

Argumento Descrição
constant Qualquer número ou string. Observe que uma string escrita diretamente no script deve ser colocada entre aspas simples. Uma string sem aspas simples será interpretada como uma variável e, em seguida, o valor da variável será usado. Os números não precisam ser colocados entre aspas simples.
expression Uma expressão arbitrária.
mask

A máscara de um nome de arquivo ou de um nome de pasta que pode incluir todos os caracteres válidos de nome de arquivo, bem como os caracteres curingas padrão * e ?.

Você pode usar caminhos de arquivo absolutos ou caminhos lib://.

condition Uma expressão lógica de avaliação como True ou False.
statements Qualquer grupo de um ou mais comandos de script do Qlik Sense.
filelist mask

Essa sintaxe produz uma lista separada por vírgulas de todos os arquivos existentes no diretório atual e que correspondem à máscara de nome de arquivo.

Nota: Este argumento suporta apenas as conexões de dados da biblioteca no modo padrão. Consulte Restrição de acesso do sistema de arquivo
dirlist mask

Essa sintaxe produz uma lista separada por vírgulas de todas as pastas existentes na pasta atual e que correspondem à máscara de nome de pasta.

Nota: Este argumento suporta apenas as conexões de dados da biblioteca no modo padrão. Consulte Restrição de acesso do sistema de arquivo
fieldvaluelist mask Esta sintaxe itera através dos valores de um campo já carregado no Qlik Sense.

Example 1: Carregando uma lista de arquivos

// 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: Criando uma lista de arquivos no disco

Este exemplo carrega uma lista de todos os arquivos do Qlik Sense relacionados em uma pasta.

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: Iterações através dos valores de um campo

Este exemplo itera através da lista dos valores carregados do FIELD e gera um novo campo, NEWFIELD. Para cada valor do FIELD, será criado dois registros NEWFIELD.

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

A tabela resultante tem a seguinte aparência:

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