Lecciones del módulo (2/2)
Tablas y Cláusula OCCURS
En COBOL no existe una palabra clave "array" o "vector" para definir listas de datos homogéneos. Para este propósito se utiliza la cláusula OCCURS, que especifica el número de veces que una variable o estructura se repite en memoria.
Definición de una tabla con OCCURS
La cláusula OCCURS se añade a la declaración de una variable subordinada (por ejemplo, de nivel 05 o superior) dentro de una estructura de grupo (nivel 01):
01 WS-SALES-DATA.
05 WS-MONTHLY-SALES PIC 9(4) OCCURS 12 TIMES.
En este ejemplo, WS-MONTHLY-SALES es una tabla formada por 12 elementos numéricos de 4 dígitos cada uno. La memoria asignada para este registro será exactamente de 12 * 4 = 48 caracteres.
Acceso a los elementos e índices
Para acceder a un elemento específico dentro de una tabla, se especifica el índice entre paréntesis inmediatamente después del nombre del campo.
[!IMPORTANT] A diferencia de la mayoría de los lenguajes modernos que utilizan índices basados en 0, COBOL utiliza índices basados en 1. El primer elemento se encuentra en el índice
1, el segundo en el índice2, y así sucesivamente.
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).
Recorrido de una tabla (Iteración)
Para recorrer los elementos de una tabla, se puede utilizar la instrucción PERFORM VARYING o gestionar manualmente un contador en un bucle PERFORM UNTIL:
PERFORM UNTIL WS-INDEX > 12
DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
ADD 1 TO WS-INDEX
END-PERFORM.
Pruébalo tú mismo
Declara una tabla de 5 temperaturas decimales (3 dígitos enteros y 1 decimal) debajo de la estructura de grupo WS-WEATHER-DATA usando la cláusula OCCURS.
Mostrar pista
Escribe: 05 WS-TEMPERATURE PIC 9(3)V9 OCCURS 5 TIMES.
Solución disponible después de 3 intentos
Inicializa los primeros tres elementos de la tabla WS-MONTHLY-SALES con los valores 1200, 1500 y 1800 respectivamente usando instrucciones MOVE. Recuerda que los índices en COBOL comienzan desde 1.
Mostrar pista
Usa MOVE 1200 TO WS-MONTHLY-SALES(1). para el primer elemento, luego repite para el segundo y tercero usando los índices (2) y (3).
Solución disponible después de 3 intentos