COBOL 中的数据类型
Data type in COBOL
我写了下面的程序,我很困惑为什么在编译程序的时候显示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-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
签名。
Additional Information
A-COL(1,1)
显示“1”,因为它将数据存储为“1xx”,其中 x = space。那不是一个数值。当你 运行 这里的解决方案时,你会注意到显示行产生“001”。
保持您的 WORKING-STORAGE 结构不变。但是,你的 data-elements 不是 A-COL,而是 THE-CONTENT。所以使用 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
.
你的结构更好,因为它更容易维护。如果你想重新定义 TABLE-CONTENT,你可以不改变结构。如果你现在"complicate"结构就不是这样了。
是的,如果您将数字文字移动到 group-item,执行 alpha-numeric 移动,结果将是您的文字 left-justified 和 space-padded 到右边,或向右截断,或恰好合适,具体取决于文字的大小。
虽然从概念上讲,您的 table 中有 "columns"(COBOL 没有数组,但它有 tables with 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)都只能使用数字字段或文字作为 source-data。一个字段只包含"a number"是不够的,必须是数值字段
GIVING(ADD、SUBTRACT、MULTIPLY 和 DIVIDE)可以将结果放在特定类型的 non-numeric 字段中,即 numeric-edited 字段。这是一个包含 numeric-editing 个 PICture 符号的 PICture 子句的字段。
我写了下面的程序,我很困惑为什么在编译程序的时候显示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-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
签名。
Additional Information
A-COL(1,1)
显示“1”,因为它将数据存储为“1xx”,其中 x = space。那不是一个数值。当你 运行 这里的解决方案时,你会注意到显示行产生“001”。
保持您的 WORKING-STORAGE 结构不变。但是,你的 data-elements 不是 A-COL,而是 THE-CONTENT。所以使用 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
.
你的结构更好,因为它更容易维护。如果你想重新定义 TABLE-CONTENT,你可以不改变结构。如果你现在"complicate"结构就不是这样了。
是的,如果您将数字文字移动到 group-item,执行 alpha-numeric 移动,结果将是您的文字 left-justified 和 space-padded 到右边,或向右截断,或恰好合适,具体取决于文字的大小。
虽然从概念上讲,您的 table 中有 "columns"(COBOL 没有数组,但它有 tables with 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)都只能使用数字字段或文字作为 source-data。一个字段只包含"a number"是不够的,必须是数值字段
GIVING(ADD、SUBTRACT、MULTIPLY 和 DIVIDE)可以将结果放在特定类型的 non-numeric 字段中,即 numeric-edited 字段。这是一个包含 numeric-editing 个 PICture 符号的 PICture 子句的字段。