如何在COBOL中打印数组(表)中的迭代?

如何在COBOL中打印数组(表)中的迭代?,cobol,Cobol,我试图只打印这个COBOL表的一个元素,但似乎我在理解COBOL中的数组(表)是如何工作的方面遇到了困难 data division. working-storage section. 01 m-airlines. 05 m-united occurs 3 times. 10 m-u-a330 pic 9(1) value 3. 10 m-u-a321 pic 9(1) value 1.

我试图只打印这个COBOL表的一个元素,但似乎我在理解COBOL中的数组(表)是如何工作的方面遇到了困难

data division.
       working-storage section.
       01 m-airlines.
         05 m-united occurs 3 times.
           10 m-u-a330 pic 9(1) value 3.
           10 m-u-a321 pic 9(1) value 1.
           10 m-u-a300 pic 9(1) value 5.
         05 m-delta occurs 3 times.
           10 m-dl-a330 pic 9(2) value 35.
           10 m-dl-a321 pic 9(2) value 27.
           10 m-dl-b777 pic 9(2) value 20.

       procedure division.
           display "number of Delta's Airbus a330: " m-delta(1,1).
我得到这个错误:

下标太多


根据代码,您有两个表元素(或)两个一维表,
m-united
m-delta
。要引用表中的项,应使用表元素的数据名及其括号中的出现编号(下标)。这称为订阅。正如@Bruce Martin在评论中提到的,您应该尝试
m-delta(1)
引用表中的第一个元素


您引用表格元素的方式,
m-delta(1,1)
适用于二维表格。这种引用方式是错误的,因为您尚未定义二维表。而是定义了两个一维表。有关创建二维/三维表格的详细信息,请参见

这些是代码生成的表。这不是你想要的

             +-------------+-------------+-------------+
m-united(1): | m-u-a330(1) | m-u-a321(1) | m-u-a300(1) |
             +-------------+-------------+-------------+
m-united(2): | m-u-a330(2) | m-u-a321(2) | m-u-a300(2) |
             +-------------+-------------+-------------+
m-united(3): | m-u-a330(3) | m-u-a321(3) | m-u-a300(3) |
             +-------------+-------------+-------------+

            +--------------+--------------+--------------+
m-delta(1): | m-dl-a330(1) | m-dl-a321(1) | m-dl-b777(1) |
            +--------------+--------------+--------------+
m-delta(2): | m-dl-a330(2) | m-dl-a321(2) | m-dl-b777(2) |
            +--------------+--------------+--------------+
m-delta(3): | m-dl-a330(3) | m-dl-a321(3) | m-dl-b777(3) |
            +--------------+--------------+--------------+
也许,这就是你想要的:

01 AIRLINE-TABLE.
   05 M-U-A330     PIC 99 VALUE 3.
   05 M-U-A321     PIC 99 VALUE 1.
   05 M-U-A300     PIC 99 VALUE 5.
   05 M-U-B777     PIC 99 VALUE 0.
   05 M-D-A330     PIC 99 VALUE 35.
   05 M-D-A321     PIC 99 VALUE 27
   05 M-D-A300     PIC 99 VALUE 0.
   05 M-D-B777     PIC 99 VALUE 20.
01 FILLER REDEFINES AIRLINE-TABLE.
   05 AIRLINE OCCURS 2 TIMES.
      10 NUM-A330  PIC 99.
      10 NUM-A321  PIC 99.
      10 NUM-A300  PIC 99.
      10 NUM-B777  PIC 99.
由此产生:

            +-------------+-------------+-------------+-------------+
airline(1): | num-a330(1) | num-a321(1) | num-a300(1) | num-b777(1) |
            +-------------+-------------+-------------+-------------+
airline(2): | num-a330(2) | num-a321(2) | num-a300(2) | num-b777(2) |
            +-------------+-------------+-------------+-------------+

... DISPLAY "Number of Delta's Airbus a330 : " num-a330(2)
或者这个:

01 AIRLINE-TABLE.
   05 M-U-A330     PIC 99 VALUE 3.
   05 M-U-A321     PIC 99 VALUE 1.
   05 M-U-A300     PIC 99 VALUE 5.
   05 M-U-B777     PIC 99 VALUE 0.
   05 M-D-A330     PIC 99 VALUE 35.
   05 M-D-A321     PIC 99 VALUE 27
   05 M-D-A300     PIC 99 VALUE 0.
   05 M-D-B777     PIC 99 VALUE 20.
01 FILLER REDEFINES AIRLINE-TABLE.
   05 AIRLINE OCCURS 2 TIMES.
      10 AIRPLANE OCCURS 4 TIMES.
         15 NUM-PLANES PIC 99.

            +------------------+------------------+------------------+------------------+
airline(1): | num-planes(1, 1) | num-planes(1, 2) | num-planes(1, 3) | num-planes(1, 4) |
            +------------------+------------------+------------------+------------------+
airline(2): | num-planes(2, 1) | num-planes(2, 2) | num-planes(2, 3) | num-planes(2, 4) |
            +------------------+------------------+------------------+------------------+

... DISPLAY "Number of Delta's Airbus a330 : " num-planes(2, 1)

尝试m-delta(1)很遗憾,m-delta(1)返回第二个数组(352720)中的所有值。我只需要35个。谢谢你的回复。实际上,我的意思是,我试图只打印阵列的一个元素(达美航空的空客a330:35的数量)。通过执行m-delta(1),它将返回352720,这是第二个数组的所有元素。有没有什么方法我只能打印35?嗨@Masood,试试
m-dl-a330(1)
。这是可行的,但是COBOL中数组的概念似乎与C#等其他编程语言完全不同。例如,如果您有公共静态int[,]array=newint[3,2]{{1,2},{3,4},{5,6};您可以调用第一个元素的第一项,如:publicstaticvoidmain(){Console.WriteLine(array[0,0]);},但我不知道如何在COBOL中实现,而不是实际调用元素本身的m-dl-a330。