2016-01-17 31 views
4

我写了下面的程序,我很困惑,为什么当我编译程序时,出现A-COL(1,1)不是显示A-COL(1, 1)给了我1COBOL中的数据类型

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. 
+0

哪条线给你错误? – Dai

+0

计算线 –

回答

5

更改A-COL定义

"10 A-COL PIC 9(3) OCCURS 2 TIMES." 

并取出TABLE-CONTENT

组变量被认为是字母数字(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”。

+0

似乎已经解决了这个问题,但是你知道为什么我不应该用这种方式写吗? –

+0

您无法在COMPUTE中引用组级别项目,因为组项目被视为ALPHANUMERIC,并且无法对ALPHANUMERIC项目执行算术运算。因此会引发编译时错误。 –

2

保持您的WORKING-STORAGE结构相同。但是,您的数据元素不是A-COL,而是内容。所以使用THE-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 
     . 

你的结构比较好,因为它更容易维护。如果您想要重新定义表格内容,您可以在不改变结构的情况下进行。如果现在“复杂化”结构,情况并非如此。

是的,如果您将数字文字移动到组项目,则会执行字母数字MOVE,结果将是您的文字左对齐和空格填充到右侧或截断到右侧,或只是拟合,取决于你的文字的大小。

虽然从概念上讲,您的表中有“列”(COBOL没有数组,它具有带有OCCURS的表),但请注意,您无法作为整体访问列。在存储器中,您有row-1-col-1,row-1-col-2,row-2-col-1,row-2-col-2到row-99-col-1,row-99-col -2。

任何算术(ADD,SUBTRACT,MULTIPLY,DIVIDE和COMPUTE)只能使用数字字段或文字作为源数据。只有一个字段包含“一个数字”是不够的,它必须是一个数字字段。

GIVING(ADD,SUBTRACT,MULTIPLY和DIVIDE)可以将结果放置在特定类型的非数字字段中,一个数字编辑的字段。这是一个带有包含数字编辑图片符号的PICture子句的字段。

+0

谢谢,我明白了! –