CoreCobol
Load a table and look values up
OCCURS, INDEXED BY, SEARCH and SEARCH ALL, with the bounds problem handled.
WORKING-STORAGE SECTION.
01 WS-RATE-TABLE.
05 WS-RATE-COUNT PIC S9(4) COMP VALUE ZERO.
05 WS-RATE-ENTRY OCCURS 1 TO 500 TIMES
DEPENDING ON WS-RATE-COUNT
ASCENDING KEY IS WS-RATE-CODE
INDEXED BY WS-RATE-IX.
10 WS-RATE-CODE PIC X(03).
10 WS-RATE-VALUE PIC S9(3)V9(4) COMP-3.
2000-LOAD-TABLE.
PERFORM UNTIL RATE-EOF
IF WS-RATE-COUNT < 500
ADD 1 TO WS-RATE-COUNT
MOVE RT-CODE TO WS-RATE-CODE(WS-RATE-COUNT)
MOVE RT-VALUE TO WS-RATE-VALUE(WS-RATE-COUNT)
ELSE
DISPLAY 'RATE TABLE OVERFLOW - INCREASE OCCURS'
MOVE 16 TO RETURN-CODE
SET RATE-EOF TO TRUE
END-IF
PERFORM 2900-READ-RATE
END-PERFORM.
3000-LOOKUP.
SEARCH ALL WS-RATE-ENTRY
AT END
DISPLAY 'NO RATE FOR CODE ' WS-IN-CODE
MOVE ZERO TO WS-RATE
ADD 1 TO WS-UNMATCHED
WHEN WS-RATE-CODE(WS-RATE-IX) = WS-IN-CODE
MOVE WS-RATE-VALUE(WS-RATE-IX) TO WS-RATE
END-SEARCH.| SEARCH | SEARCH ALL | |
|---|---|---|
| Method | Sequential from the current index | Binary search |
| Table must be | Any order | Sorted, with ASCENDING/DESCENDING KEY declared |
| Set index first | Yes — SET ix TO 1 | No |
| Cost on 500 entries | Up to 500 comparisons | About 9 comparisons |
Stuck on something else?
Ask the community or search the full course.