Index through a COBOL defined multi-dimensional table with VISION:Results
search cancel

Index through a COBOL defined multi-dimensional table with VISION:Results

book

Article ID: 21386

calendar_today

Updated On:

Products

Vision:Results

Issue/Introduction

How can I index through a COBOL defined multi-dimensional table with VISION:Results?

Resolution

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
 **************************************************************