COBOL中的数据类型

COBOL中的数据类型,cobol,gnucobol,Cobol,Gnucobol,我已经写了下面的程序,我很困惑为什么当我编译程序时,我得到一个错误,说A-COL(1,1)不是一个数值,而显示A-COL(1,1)给我1 IDENTIFICATION DIVISION. PROGRAM-ID. TEST1. DATA DIVISION. WORKING-STORAGE SECTION. 01 DIFF PIC 9(3). 01 ARRAY. 05 A-ROW OCCURS 99 TIMES.

我已经写了下面的程序,我很困惑为什么当我编译程序时,我得到一个错误,说A-COL(1,1)不是一个数值,而显示A-COL(1,1)给我1

   IDENTIFICATION DIVISION.
   PROGRAM-ID. TEST1.
   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 DIFF PIC 9(3).
       01 ARRAY.
           05 A-ROW OCCURS 99 TIMES.
               10 A-COL OCCURS 2 TIMES.
                   15 TABLE-CONTENT PIC 9(3).

   PROCEDURE DIVISION.
       MOVE 1 TO A-COL(1,1).
       MOVE 2 TO A-COL(2,1).
       DISPLAY A-COL(1,1).
       COMPUTE DIFF = A-COL(1,1) - A-COL(2,1).
       DISPLAY DIFF.
   STOP RUN.

将A列定义更改为

"10 A-COL PIC 9(3) OCCURS 2 TIMES."
并删除
表格内容

组变量被视为字母数字(X类型),因此不能在计算中使用

或者,您也可以这样做-使用实际数字字段引用地址位置

PROCEDURE DIVISION.
   MOVE 1 TO TABLE-CONTENT(1,1).
   MOVE 2 TO TABLE-CONTENT(2,1).
   DISPLAY A-COL(1,1).
   COMPUTE DIFF = TABLE-CONTENT(1,1) - TABLE-CONTENT(2,1).
   DISPLAY DIFF.
另外,您可能需要对
DIFF
进行签名

补充资料


A-COL(1,1)
显示“1”,因为它将数据存储为“1xx”,其中x=空格。这不是一个数值。在这里运行解决方案时,您会注意到显示行生成“001”。

保持工作存储结构不变。但是,您的数据元素不是A列,而是内容。因此,请使用-CONTENT,而不是A-COL

   IDENTIFICATION DIVISION.
   PROGRAM-ID. TEST1.
   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01  DIFF PIC S9(3).
   01  ARRAY.
       05  A-ROW 
           OCCURS 99 TIMES.
           10  A-COL 
               OCCURS 2 TIMES.
               15 TABLE-CONTENT            PIC 9(3).

   PROCEDURE DIVISION.
       MOVE 1                       TO TABLE-CONTENT ( 1 1 )
       MOVE 2                       TO TABLE-CONTENT ( 2 1 )
       DISPLAY 
               ">"
               TABLE-CONTENT ( 1 1 )
               "<"
       COMPUTE DIFF                 = TABLE-CONTENT ( 1 1 ) 
                                    - TABLE-CONTENT ( 2 1 )
       DISPLAY 
               ">"
               DIFF
               "<"
       STOP RUN
       .
识别部门。
程序ID.TEST1。
数据司。
工作和储存科。
01不同图片S9(3)。
01阵列。
05排
发生99次。
10 A柱
发生2次。
15表格内容图9(3)。
程序司。
将1移动到表格内容(1)
移动2到表格内容(2 1)
展示
">"
表1-1内容(1)
""
差异

“哪一行给了您错误?似乎已经解决了问题,但您知道我为什么不应该这样写吗?您不能在计算中引用组级项,因为组项被视为字母数字项,并且您不能对字母数字项执行算术运算。因此,这会引发编译时错误。谢谢,我不理解。”W