How can I index through a COBOL defined multi-dimensional table with VISION:Results?
Without using TABLE or ARRAY features only one subscript can be used at a time. When multiple subscripts reference a field outside of the TABLE or ARRAY definition only the last subscript is honored.
This is one example showing how to index through a multi-dimensional COBOL layout:
OPTION STRUCTURED2
FILE INFILE F 164 STATUS INSTAT LENGTH RECLEN
INREC 164
FILE XFILE DUMMY
WORKAREA
WS_GRP_CD 2
WS_RSN_CD 5
WS_ADJ_AMT 12 NU 2 VALUE 0
WS_LN_ADJ_AMT 12 NU 2 VALUE 0
WS_UOS 9 NU 2 VALUE 0
WORKAREA
$COBOL
01 GRP-DATA.
12 GRP-TABLE OCCURS 5 TIMES
INDEXED BY GRP-TBL-NDX.
13 ADJ-GRP-CD PIC XX.
13 RSN-TABLE OCCURS 6 TIMES
INDEXED BY RSN-TBL-NDX.
15 LN-REASON-CD PIC X(05).
15 LN-ADJ-AMT PIC S9(11)V99.
15 LN-UOS PIC 9(07)V99.
$ECOBOL
INX = 0
READ INFILE
IF INSTAT EQ 'E' STOP ENDIF
DOWHILE INSTAT NE 'E'
MOVE INREC TO GRP_DATA(INX) LENGTH RECLEN
READ INFILE
INX = INX + RECLEN
ENDDO
INY = 1 ; USE INY AS COUNTER RATHER THAN INDEX
INX = 1 ; USE INX AS COUNTER RATHER THAN INDEX
INZ = 0
WS_LN_ADJ_AMT = 0
DOWHILE INY LE 5 AND ADJ_GRP_CD (INZ) GT ' '
INW = INZ
DOWHILE INX LE 6 AND LN_REASON_CD (INW) GT ' '
WS_GRP_CD = ADJ_GRP_CD (INZ)
WS_RSN_CD = LN_REASON_CD (INW)
WS_ADJ_AMT = LN_ADJ_AMT (INW)
WS_UOS = LN_UOS (INW)
LIST INW INX INY INZ
WS_GRP_CD WS_RSN_CD WS_ADJ_AMT WS_UOS
WS_LN_ADJ_AMT = WS_LN_ADJ_AMT + LN_ADJ_AMT (INW)
INX = INX + 1
INW = INW + 27
ENDDO
INX = 1
INY = INY + 1
INZ = INW + 2
ENDDO
STOP
These are the resulting values:
INW INX INY INZ WS_GRP_CD WS_RSN_CD WS_ADJ_AMT WS_UOS
0 1 1 0 AA REA01 9999.05 11.05
27 2 1 0 AA REA02 8888.05 22.05
54 3 1 0 AA REA03 7777.05 33.05
81 4 1 0 AA REA04 6666.05 44.05
108 5 1 0 AA REA05 5555.05 55.05
135 6 1 0 AA REA06 4444.05 66.05
164 1 2 164 BB REB01 19999.05 911.05
191 2 2 164 BB REB02 18888.05 922.05
218 3 2 164 BB REB03 17777.05 933.05
245 4 2 164 BB REB04 16666.05 944.05
272 5 2 164 BB REB05 15555.05 955.05
299 6 2 164 BB REB06 14444.05 966.05
328 1 3 328 CC REC01 29999.05 811.05
355 2 3 328 CC REC02 28888.05 822.05
382 3 3 328 CC REC03 27777.05 833.05
409 4 3 328 CC REC04 26666.05 844.05
436 5 3 328 CC REC05 25555.05 855.05
463 6 3 328 CC REC06 24444.05 866.05
492 1 4 492 DD RED01 39999.05 711.05
519 2 4 492 DD RED02 38888.05 722.05
546 3 4 492 DD RED03 37777.05 733.05
573 4 4 492 DD RED04 36666.05 744.05
600 5 4 492 DD RED05 35555.05 755.05
627 6 4 492 DD RED06 34444.05 766.05
656 1 5 656 EE REE01 49999.05 611.05
683 2 5 656 EE REE02 48888.05 622.05
710 3 5 656 EE REE03 47777.05 633.05
737 4 5 656 EE REE04 46666.05 644.05
764 5 5 656 EE REE05 45555.05 655.05
791 6 5 656 EE REE06 44444.05 666.05
**************************************************************