Auxílios do VisualAge Generator

WHILE

WHILE repete um bloco de instruções de processamento até que uma condição específica ou um conjunto de condições não seja mais verdadeiro.

Parênteses podem ser usados para controlar como as condições são avaliadas.

Quando uma expressão condicional é encadeada dentro de parênteses, a interpretação prossegue a partir da parte menos inclusiva para a parte mais inclusiva da expressão. A expressão encadeada é avaliada antes da expressão que a contém. A não ser que a ordem de interpretação seja modificada por parênteses, o operador AND é interpretado antes do operador OR.

Os parênteses podem ser usados para:

A instrução WHILE pode conter:

Uma instrução END fecha uma instrução WHILE.

Este bloco de instruções controlado por uma instrução condicional pode conter instruções condicionais. Isso pode continuar até um máximo de 15 níveis de profundidade.

Quando WHILE for usado no estágio de fluxo de uma função e um nome de função estiver especificado no bloco de instruções controlado pelo WHILE, o controle é transferido para o processo nomeado e não retorna.

Selecione IS para testar true para uma condição verdadeira ou selecione NOT para testar true para uma condição falsa. As Variações de WHILE são:

Item de dados

Selecione Item de dados para verificar se um item de dados contém o seguinte:

BRANCOS, BRANCOS
Quando utilizado com itens de mapa, testa efetivamente se um dos seguintes casos for verdadeiro:

Quando utilizado com itens que não sejam mapas com tipo de dados CHA, MISTO ou DBCS, ele testa efetivamente se o item de dados contém apenas brancos.

NUMÉRICO
Se o item do mapa ou tipo do item de dados for um caractere ou misto, testa efetivamente se o campo contém os caracteres de 0 à 9. NUMERIC não pode ser usado com palavras EZE.

Registro DL/I

Selecione Registro DL/I para verificar o status ou condição da última função de DL/I E/S para um registro. As seguintes opções estão disponíveis:

DUP
Testa se há uma chave duplicada. A opção de E/S pode ou não ter sido bem-sucedida, dependendo de as chaves duplicadas serem ou não permitidas.

EOF
Testa se há o fim de um arquivo.

ERR
Testa se há um código de retorno que não seja zero (0) para bancos de dados de arquivos e relacionais ou branco para bancos de dados DL/I.

HRD
Testa se há algum erro permanente de E/S.

NRF
Testa se há um "nenhum registro encontrado" em um arquivo ou banco de dados.

UNQ
Testa se uma tentativa foi feita para incluir ou substituir uma registro em um arquivo ou banco de dados para o qual uma chave duplicada já existe.

EZEAID

Selecione EZEAID para verificar uma tecla de função que o usuário do programa pressiona durante E/S de mapa. As seguintes opções estão disponíveis:

DESVIAR
Qualquer uma das teclas especificadas como teclas de desvio para o mapa ou para o programa, se nenhuma tiver sido especificada para o mapa.

ENTER
A tecla ENTER foi pressionada.

PA
Qualquer tecla PA foi pressionada.

PAn
Onde "n" é um inteiro de 1 a 3. PAn está ativado se a tecla PA com o número correspondente tiver sido pressionada.

PF
Qualquer tecla de função foi pressionada.

PFn
Onde "n" é um inteiro de 1 a 24. PFn está ativado se a tecla de função com o número correspondente tiver sido pressionada.

EZESYS

Selecione EZESYS no quadro de grupo Variações para testar o sistema onde o seu programa está executando.

Comparação de Item

Selecione Comparação de item para comparar dois itens de dados. Os seguintes valores estão disponíveis:

EQ ou =
Operadores booleanos que testam efetivamente se valores de item de dados forem iguais.

NE, ¬=, =¬, ^=, ou =^
Operadores booleanos que testam efetivamente se valores de item de dados não forem iguais.
Nota:Os símbolos ¬ e ^ não se encontram no conjunto sintático de caracteres de idioma nacional, e talvez não tenham um ponto de código equivalente em códigos de página diferentes. Se você estiver exportando seu programa ou gerando para máquinas com códigos de página diferentes (em específico, entre sistemas centrais e estações de trabalho do System/370), utilize NE, não os símbolos.

GT ou >
Operadores booleanos que testam efetivamente se o valor do primeiro item de dados for superior ao do segundo.

LT ou <
Operadores booleanos que testam efetivamente se o valor do primeiro item de dados for inferior ao do segundo.

GE, >= ou =>
Operadores booleanos que testam efetivamente se o valor do primeiro item de dados for superior ou igual ao do segundo.

LE, <= ou =<
Operadores booleanos que testam efetivamente se o valor do primeiro item de dados for inferior ou igual ao do segundo.

IN
Operador booleano que testa efetivamente se o valor no primeiro item de dados puder ser encontrado na matriz representada pelo segundo item de dados.

Caso não seja encontrado um correspondente, o processamento pula para a instrução ELSE ou END correspondente.

Nota:O valor de palavra de função especial EZETST é definido para 0 se uma correspondência não for encontrada. Caso nenhum correspondente seja encontrado, EZETST é definido para o número de índice do primeiro elemento da matriz que corresponde ao valor do item de dados.

Itens sucessivos na matriz são comparados até que uma correspondência seja encontrada ou o fim da matriz seja alcançado. Se a matriz incluir um índice, o teste começa nele e não a partir do primeiro item da matriz. Se nenhum índice inicial for especificado, o teste começa com o primeiro item na matriz. Se o valor do índice inicial for maior que o número de entradas na matriz ou se nenhum correspondente for encontrado, o teste transcorrerá como falso.

A comparação junto a um único item de dados ao invés de uma matriz é equivalente a comparar por iguais, mas é mais lenta e causa a definição de EZETST em 0 ou 1. Ele não será tratado como um erro.

A função IN é semelhante à instrução FIND no que diz respeito a ambas procurarem por valores, porém você utilizaria IF ou WHILE ao invés de FIND nas seguintes situações:

Mapa

Selecione Mapa para fazer com que a instrução verifique se um usuário do programa modificou qualquer campo de variável em um mapa. O valor é:

MODIFIED
Testa efetivamente se foram alterados os dados no campo variável. Os dados são considerados alterados quando alguma das seguintes condições é verdadeira:

Item de mapa

Selecione Item de mapa para verificar o status de um campo de variável num mapa. As seguintes opções estão disponíveis:

BLANK, BLANKS
Quando utilizado com itens de mapa, testa efetivamente se um dos seguintes casos for verdadeiro:

Quando utilizado com itens que não sejam mapas com tipo de dados CHA, MISTO ou DBCS, ele testa efetivamente se o item de dados contém apenas brancos.

CURSOR
Testa se o usuário deixou o cursor no item de dados especificado.

DATA
Testa se há dados que não sejam brancos ou nulos dentro do item de mapa especificado. Ou o usuário inseriu os dados ou os dados foram movidos para o campo antes de gravar na tela.

MODIFIED
Testa efetivamente se foram alterados os dados no campo variável. Os dados são considerados alterados quando alguma das seguintes condições é verdadeira:

NULL, NULOS
Quando especificado para um campo variável do mapa, testa efetivamente se alguns dos seguintes casos é verdadeiro:

Quando utilizado com itens que não sejam mapas com tipo de dados CHA, MISTO ou DBCS, ele testa efetivamente se o item de dados contém apenas brancos.

NUMERIC
Se o item do mapa ou tipo do item de dados for um caractere ou misto, testa efetivamente se o campo contém os caracteres de 0 à 9. NUMERIC não pode ser usado com palavras EZE.

Registro

Selecione Registro para verificar o status ou condição da última função de E/S do registro. As seguintes opções estão disponíveis:

DUP
Testa se há uma chave duplicada. A opção de E/S pode ou não ter sido bem-sucedida, dependendo de as chaves duplicadas serem ou não permitidas.

EOF
Testa se há o fim de um arquivo.

ERR
Testa se há um código de retorno que não seja zero (0) para bancos de dados de arquivos e relacionais ou branco para bancos de dados DL/I.

FMT
Testa o formato de um arquivo junto ao que foi definido.

FNA
Testa a disponibilidade de um arquivo.

FNF
Testa se há "nenhum arquivo encontrado" para o registro.

FUL
Testa se há uma chave de fila de arquivo cheio ou armazenamento temporário superior a 32767.

FUL não é definido para arquivos em série não-VSAM em MVS/TSO e MVS batch. Ao invés disso, um término anormal (B37) é recebido.

HRD
Testa se há algum erro permanente de E/S.

LOK
Testa se há uma condição de lockout em um sistema OS/400.

NRF
Testa se há um "nenhum registro encontrado" em um arquivo ou banco de dados.

UNQ
Testa se uma tentativa foi feita para incluir ou substituir uma registro em um arquivo ou banco de dados para o qual uma chave duplicada já existe.

Item SQL

Selecione Item SQL para testar se um item de dados em um registro de linha SQL possui qualquer das seguintes características:

BLANK, BLANKS
Quando utilizado com itens de mapa, testa efetivamente se um dos seguintes casos for verdadeiro:

Quando utilizado com itens que não sejam mapas com tipo de dados CHA, MISTO ou DBCS, ele testa efetivamente se o item de dados contém apenas brancos.

NULL, NULOS
Quando especificado para um campo variável do mapa, testa efetivamente se alguns dos seguintes casos é verdadeiro:

Quando utilizado com itens que não sejam mapas com tipo de dados CHA, MISTO ou DBCS, ele testa efetivamente se o item de dados contém apenas brancos.

NUMERIC
Se o item do mapa ou tipo do item de dados for um caractere ou misto, testa efetivamente se o campo contém os caracteres de 0 à 9. NUMERIC não pode ser usado com palavras EZE.

TRUNC
Testa se um caractere ou um item DBCS em um registro de linha SQL foi truncado (caracteres não-brancos excluídos à direita) da última vez que o valor do item foi lido do banco de dados relacional. O truncamento pode apenas ocorrer quando a coluna no banco de dados é maior do que o item de dados.

O indicador TRUNC é redefinido sempre que um valor for movido para o item, ou quando o item estiver definido para NULL.

Registro SQL

Selecione Registro SQL para verificar o status ou condição da última função de SQL E/S para um registro.

DED
Testa se um conflito ocorreu quando duas transações separadas tentaram atualizar os registros sendo mantidos por outros bloqueios.

DED somente ocorre para registros de linha SQL e é um erro permanente. Ao utilizar o DB2, o SQLCODE é -911. O código de erro DED pode ser recebido apenas se EZEFEC for igual a 1.

DUP
Testa se há uma chave duplicada. A opção de E/S pode ou não ter sido bem-sucedida, dependendo de as chaves duplicadas serem ou não permitidas.

EOF
Testa se há o fim de um arquivo.

ERR
Testa se há um código de retorno que não seja zero (0) para bancos de dados de arquivos e relacionais ou branco para bancos de dados DL/I.

FMT
Testa o formato de um arquivo junto ao que foi definido.

FNA
Testa a disponibilidade de um arquivo.

FNF
Testa se há "nenhum arquivo encontrado" para o registro.

FUL
Testa se há uma chave de fila de arquivo cheio ou armazenamento temporário superior a 32767.

FUL não é definido para arquivos em série não-VSAM em MVS/TSO e MVS batch. Ao invés disso, um término anormal (B37) é recebido.

HRD
Testa se há algum erro permanente de E/S.

LOK
Testa se há uma condição de lockout em um sistema OS/400.

NRF
Testa se há um "nenhum registro encontrado" em um arquivo ou banco de dados.

UNQ
Testa se uma tentativa foi feita para incluir ou substituir uma registro em um arquivo ou banco de dados para o qual uma chave duplicada já existe.

Informações de referência

Exemplos para WHILE

Eis exemplos que ensinam a usar a instrução WHILE:

Instrução WHILE

A seguir, um exemplo de uma instrução WHILE:

   WHILE
NUMRECS > 0 AND        /* Enquanto houver mais dados e o
     (REQTYPE = 1 OR            /* tipo de pedido for 1 ou
     REQTYPE = 2);              /* tipo de pedido for 2.

Instrução WHILE somando os elementos em uma matriz

As seguintes instruções somam os elementos em uma matriz, que possui 50 entradas, mas encerram antes se um termo maior do que 9999 for encontrado:

        MOVE 0 TO TOTAL;
        MOVE 1 TO J;
        WHILE J LE 50
          AND ARRAY(J) LE 9999;
            TOTAL = TOTAL + ARRAY(J);
            J = J + 1;
        END;

As duas condições sendo testadas são que J é menor que ou igual a 50 (isto é, o subscrito está dentro do intervalo da matriz) e que a entrada é menor que ou igual a 9999. Contanto que ambas as condições sejam satisfeitas (AND), a entrada é adicionada à soma das entradas anteriores (TOTAL) e o subscrito (J) é incrementado. Quando uma das condições não é satisfeita, a soma pára.

Instrução WHILE usando a operação IN

A operação IN fornece uma função semelhante à função FIND, mas muito mais poderosa. Um item de dados (chamado ITEM no exemplo abaixo) é comparado a outro item de dados (chamado LIST no exemplo abaixo) para assegurar que eles se correspondem. O item de dados LIST deve ser uma matriz. Itens sucessivos na matriz são comparados até que uma correspondência seja encontrada ou o fim da matriz seja alcançado. Se LIST incluir um índice, a pesquisa começa nele e não no primeiro item na matriz.

Eis um exemplo de instrução WHILE que usa a operação IN:

       MOVE 1 TO START;                              /* Início de matriz
       NUMBER-OF-OCCURS = 0;                         /* Nenhum ainda encontrado
       WHILE ITEM IN LIST(START);                    /* Encontra próxima ocorrência
           NUMBER-OF-OCCURS = NUMBER-OF-OCCURS + 1;  /* Conta número de ocorrências
           START = EZETST + 1;                       /* Pula passando o encontrado
        END:

Nesse momento NUMBER_OF_OCCURS contém o número de vezes que o valor em ITEM aparece na matriz LIST.

O exemplo acima é utilizado para determinar o número de vezes que um valor ocorre em uma matriz. O loop será encerrado se ocorrer algumas destas condições:

Se nenhum índice inicial for especificado, o teste começa com o primeiro item na matriz. Se o valor do índice inicial for maior que o número de entradas na matriz, o teste transcorrerá como falso. Ele não será tratado como um erro.

Eis algumas vantagens de usar IN em vez da instrução FIND:


[ Início da Página | Página Anterior | Próxima Página | Índice ]