Ir para conteúdo principal Pular para conteúdo complementar

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.

Sintaxe:  

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]

Argumentos:  

Argumentos
ArgumentoDescrição
varUm 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 informativaComo 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.

Sintaxe:  

list := item { , item }

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

 

Argumentos
ArgumentoDescrição
constantQualquer 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.
expressionUma 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://.

conditionUma expressão lógica de avaliação como True ou False.
statementsQualquer 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.

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.

fieldvaluelist maskEssa sintaxe itera através dos valores de um campo já carregado no Qlik Sense.
Nota de advertênciaO Qlik Conectores do provedor de armazenamento na Web e outras conexões de DataFiles não oferecem suporte para máscaras de filtro que usam os caracteres curinga (* e ?).

Exemplo 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

Exemplo 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://DataFiles')

Exemplo 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:

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

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!