01 FIELD-X PIC X(6).
01 FIELD-N REDEFINES FIELD-X PIC 9(4)V9(2).
Both FIELD-X and FIELD-N above refer to the same 6 byte storage area.
The following example shows how REDEFINES may be used to load a table.
01 FEDERAL-TAX-TABLE-DESCRIPTION.
02 FILLER PICTURE X(18) VALUE '280000003968869950'.
02 FILLER PICTURE X(18) VALUE '129650003603457350'.
02 FILLER PICTURE X(18) VALUE '057450003101219150'.
02 FILLER PICTURE X(18) VALUE '026900002800363750'.
02 FILLER PICTURE X(18) VALUE '002650001500000000'.
*
01 FEDERAL-TAX-TABLE REDEFINES FEDERAL-TAX-TABLE-DESCRIPTION.
02 FEDERAL-TAX-ITEM OCCURS 5 TIMES
03 FEDERAL-TAX-LOW-LIMIT PICTURE 9(6)V9(2).
03 FEDERAL-TAX-RATE PICTURE V9(3).
03 FEDERAL-TAX-CONSTANT PICTURE 9(5)V9(2).
*
01 TAX-SUBSCRIPT PICTURE 9 COMP.
Here is the same table again, but this time we use an Index rather than a Subscript.
01 FEDERAL-TAX-TABLE REDEFINES FEDERAL-TAX-TABLE-DESCRIPTION.
02 FEDERAL-TAX-ITEM OCCURS 5 TIMES
INDEXED BY FEDERAL-TAX-INDEX.
03 FEDERAL-TAX-LOW-LIMIT PICTURE 9(6)V9(2).
03 FEDERAL-TAX-RATE PICTURE V9(3).
03 FEDERAL-TAX-CONSTANT PICTURE 9(5)V9(2).
This example shows a table lookup using a subscript and PERFORM VARYING.
01 SUB-X PIC 9(3) COMP.
01 TABLE-X.
02 TABLE-ITEM OCCURS 100 TIMES.
03 FIELD-1 PIC X(2).
03 FIELD-2 PIC X(1).
03 FIELD-3 PIC X(2).
01 FOUND-IT-FLAG PIC X.
PROCEDURE DIVISION.
MOVE 'N' TO FOUND-IT-FLAG.
PERFORM LOOKUP-ROUTINE
VARYING SUB-X FROM 1 BY 1
UNTIL SUB-X > 100
OR FOUND-IT-FLAG = 'Y'.
IF FOUND-IT-FLAG = 'Y'
PERFORM FOUND-IT-ROUTINE
ELSE
PERFORM NOT-FOUND-ROUTINE
END-IF.
LOOKUP-ROUTINE.
IF IN-FIELD = FIELD-1 (SUB-X)
MOVE 'Y' TO FOUND-IT-FLAG.
Let's try that same lookup again, but this time the table is indexed. Notice there is less coding necessary.
01 TABLE-X.
02 TABLE-ITEM OCCURS 100 TIMES
INDEXED BY INDEX-X.
03 FIELD-1 PIC X(2).
03 FIELD-2 PIC X(1).
03 FIELD-3 PIC X(2).
PROCEDURE DIVISION.
SET INDEX-X TO 1.
SEARCH TABLE-ITEM
AT END PERFORM NOT-FOUND-ROUTINE
WHEN IN-FIELD = FIELD-1 (INDEX-X)
PERFORM FOUND-IT-ROUTINE.
Notice that for SEARCH ALL we add a KEY to the table and it is no longer necessary to SET the index to 1 before searching.
01 TABLE-X.
02 TABLE-ITEM OCCURS 100 TIMES
ASCENDING KEY FIELD-1
INDEXED BY INDEX-X.
03 FIELD-1 PIC X(2).
03 FIELD-2 PIC X(1).
03 FIELD-3 PIC X(2).
PROCEDURE DIVISION.
SEARCH ALL TABLE-ITEM
AT END PERFORM NOT-FOUND-ROUTINE
WHEN IN-FIELD = FIELD-1 (INDEX-X)
PERFORM FOUND-IT-ROUTINE.