Table with DEPENDING ON
Problem Description
Create variable-length table using OCCURS DEPENDING ON.
Expected Output
Dynamic array sizing
Hints
OCCURS n TO m DEPENDING ON var for variable length.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. VARLEN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MAX-ITEMS PIC 9(2) VALUE 20.
01 WS-ITEM-COUNT PIC 9(2) VALUE 0.
01 WS-ITEMS.
05 WS-ITEM OCCURS 1 TO 20 TIMES
DEPENDING ON WS-ITEM-COUNT.
10 WS-ITEM-CODE PIC X(5).
10 WS-ITEM-DESC PIC X(20).
10 WS-ITEM-QTY PIC 9(3).
01 WS-I PIC 9(2).
01 WS-TOTAL-QTY PIC 9(5) VALUE 0.
PROCEDURE DIVISION.
* Add items dynamically
ADD 1 TO WS-ITEM-COUNT.
MOVE "A001" TO WS-ITEM-CODE(1).
MOVE "WIDGET" TO WS-ITEM-DESC(1).
MOVE 100 TO WS-ITEM-QTY(1).
ADD 1 TO WS-ITEM-COUNT.
MOVE "A002" TO WS-ITEM-CODE(2).
MOVE "GADGET" TO WS-ITEM-DESC(2).
MOVE 50 TO WS-ITEM-QTY(2).
ADD 1 TO WS-ITEM-COUNT.
MOVE "A003" TO WS-ITEM-CODE(3).
MOVE "GIZMO" TO WS-ITEM-DESC(3).
MOVE 75 TO WS-ITEM-QTY(3).
* Process only active items
DISPLAY "INVENTORY (" WS-ITEM-COUNT " ITEMS):".
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-ITEM-COUNT
DISPLAY WS-ITEM-CODE(WS-I) " - " WS-ITEM-DESC(WS-I)
" QTY: " WS-ITEM-QTY(WS-I)
ADD WS-ITEM-QTY(WS-I) TO WS-TOTAL-QTY
END-PERFORM.
DISPLAY "TOTAL QUANTITY: " WS-TOTAL-QTY.
STOP RUN.
Explanation:
OCCURS n TO m DEPENDING ON var creates variable length table.