Estou fazendo um PERFORM simples VARIANDO WS-IND DE 1 POR 1
Abaixo está meu código:
PERFORM VARYING WS-INDICE FROM 1 BY 1
UNTIL WS-INDICE > 9
OR TEST-OBJEC(WS-INDICE) = SPACES
MOVE TEST-OBJEC(WS-INDICE) TO WS-VAL-OBJEC(WS-INDICE)
MOVE TEST-DATE(WS-INDICE) TO WS-DAT-OBJEC(WS-INDICE)
END-PERFORM
O índice foi declarado assim:
01 WS-INDICE PIC 9(01).
Abaixo da declaração do meu array
10 TEST-GROUP
OCCURS 009.
15 TEST-OBJEC PICTURE X(01).
15 TEST-DATE PICTURE X(8).
10 FILLER PICTURE X(56).
Meu problema é que o WS-INDICE chega até as 9 e reinicia do 0.
Descrição do Problema
Código
Motivo do problema
Um compilador que não avisa sobre condições que podem nunca ser verdadeiras e adicionais também transborda (o padrão COBOL diz "aumentar exceção e não alterar valor").
... por causa da definição
WS-INDICE PIC 9(01).
Esta variável não pode conter mais de um dígito e nunca deve ser maior que 9 (deixando de fora a possibilidade de alguém passar
x'99'
para isso, inserindo dados inválidos).Ajuste a definição para usar a
PIC 99
e está tudo bem. E possivelmente considere usar constantes:Para que isso funcione, você precisaria de suporte para uma extensão comum de PC "constantes de nível 78" ou um compilador que suporte "constantes COBOL 2002":
... e possivelmente considere usar outro compilador para obter melhores avisos (caso contrário, você não precisa usá-lo), por exemplo, com GnuCOBOL 3+ e
cobc -W -frelax-syntax-checks -fsyntax-only
: