For..next
O comando de controle for..next cria uma construção de iteração de script com um contador. Os comandos dentro do loop incluídos entre for e next serão executados para cada valor da variável do contador, entre (e inclusive) os limites inferior e superior especificados.
Sintaxe:
For counter = expr1 to expr2 [ step expr3 ]
[statements]
[exit for [ ( when | unless ) condition ]
[statements]
Next [counter]
As expressões expr1, expr2 e expr3 serão avaliadas somente na primeira vez que o loop é inserido. O valor da variável counter 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.
Argumentos:
Argumento | Descrição |
---|---|
counter | Um nome de variável. Se counter for especificado depois de next, ele deverá ter o mesmo nome de variável que a encontrada após o for correspondente. |
expr1 | Uma expressão que determina o primeiro valor da variável counter para o qual o loop deve ser executado. |
expr2 |
Uma expressão que determina o valor máximo da variável counter para o qual o loop deve ser executado. |
expr3 | Uma expressão que determina o valor que indica o incremento da variável counter cada vez que o loop é executado. |
condition | uma expressão lógica de avaliação como True ou False. |
statements | Qualquer grupo de um ou mais comandos de script do QlikView. |
Exemplo 1: Carregando uma sequência de arquivos
// LOAD files file1.csv..file9.csv
for a=1 to 9
LOAD * from file$(a).csv;
next
Exemplo 2: Carregando um número aleatório de arquivos
Neste exemplo, presumimos que existem os arquivos de dados x1.csv, x3.csv, x5.csv, x7.csv e x9.csv. O carregamento é interrompido em um ponto aleatório usando a condição if rand( )<0.5 then.
for counter=1 to 9 step 2
set filename=x$(counter).csv;
if rand( )<0.5 then
exit for unless counter=1
end if
LOAD a,b from $(filename);
next