Mainframe Path Start learning free
CoreCobol

Load a table and look values up

OCCURS, INDEXED BY, SEARCH and SEARCH ALL, with the bounds problem handled.

Table lookup
       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.
SEARCHSEARCH ALL
MethodSequential from the current indexBinary search
Table must beAny orderSorted, with ASCENDING/DESCENDING KEY declared
Set index firstYes — SET ix TO 1No
Cost on 500 entriesUp to 500 comparisonsAbout 9 comparisons

Stuck on something else?
Ask the community or search the full course.

Ask a question