Auxílios do VisualAge Generator
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:
- Modificar a precedência Booleana normal de operações
- Excluir ambigüidades onde operações aparecem no mesmo nível.
A instrução WHILE pode conter:
- Cláusulas AND ou OR antes do conjunto de instruções de processamento
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:
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:
- Os dados recebidos do display para o item de dados especificado continhas
só brancos ou nulos ou ambos.
- O mapa contendo o item não foi convertido desde a inicialização do
programa ou desde o último mapa SET CLEAR.
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.
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.
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.
Selecione EZESYS no quadro de grupo
Variações para testar o sistema onde o seu programa está
executando.
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:
- IN trabalha com qualquer matriz, não apenas uma coluna de tabela.
- A pesquisa não tem que começar na primeira definição da matriz.
- Valores duplicados podem ser encontrados na matriz.
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:
- Quando especificado para um campo variável do mapa, dados foram fornecidos
pelo usuário do programa a última vez que o mapa foi exibido.
- Um SET MODIFIED foi efetuado antes da CONVERSE do mapa.
- O campo no mapa foi definido com um tag de dados modificado (MDT) na hora
da definição do mapa, e esta é a primeira exibição do mapa no programa ou a
primeira exibição do mapa após um SET CLEAR.
- Quando especificado para um mapa, testa efetivamente se algum campo
variável do mapa foi alterado.
Nota: | Isto poupa você de ter que testar cada campo do mapa separadamente.
|
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:
- Os dados recebidos do display para o item de dados especificado continhas
só brancos ou nulos ou ambos.
- O mapa contendo o item não foi convertido desde a inicialização do
programa ou desde o último mapa SET CLEAR.
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:
- Quando especificado para um campo variável do mapa, dados foram fornecidos
pelo usuário do programa a última vez que o mapa foi exibido.
- Um SET MODIFIED foi efetuado antes da CONVERSE do mapa.
- O campo no mapa foi definido com um tag de dados modificado (MDT) na hora
da definição do mapa, e esta é a primeira exibição do mapa no programa ou a
primeira exibição do mapa após um SET CLEAR.
- Quando especificado para um mapa, testa efetivamente se algum campo
variável do mapa foi alterado.
Nota: | Isto poupa você de ter que testar cada campo do mapa separadamente.
|
- NULL, NULOS
- Quando especificado para um campo variável do mapa, testa efetivamente se
alguns dos seguintes casos é verdadeiro:
- Os dados recebidos do display para o item de dados especificado continha
só nulos, brancos ou ambos. Os nulos são recebidos quando o usuário do
programa pressiona a tecla Apagar EOF.
- O mapa contendo o item não foi convertido desde a inicialização do
programa ou desde o último mapa SET CLEAR.
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.
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.
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:
- Os dados recebidos do display para o item de dados especificado continhas
só brancos ou nulos ou ambos.
- O mapa contendo o item não foi convertido desde a inicialização do
programa ou desde o último mapa SET CLEAR.
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:
- Os dados recebidos do display para o item de dados especificado continha
só nulos, brancos ou ambos. Os nulos são recebidos quando o usuário do
programa pressiona a tecla Apagar EOF.
- O mapa contendo o item não foi convertido desde a inicialização do
programa ou desde o último mapa SET CLEAR.
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.
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
Eis exemplos que ensinam a usar a 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.
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.
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 ITEM não aparecer em LIST
- Quando START se tornar maior do que o número de entradas na matriz LIST
- Quando não houver ocorrências do valor de ITEM em LIST na ou acima da
entrada anteriormente encontrada
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 trabalha com qualquer matriz, não apenas com uma coluna de
tabela.
- A pesquisa não tem que começar na primeira entrada da matriz.
- Valores duplicados podem ser encontrados na matriz.
[ Início da Página | Página Anterior | Próxima Página | Índice ]