📅  最后修改于: 2020-11-22 16:48:14             🧑  作者: Mango
COBOL布局是对每个字段的使用及其中存在的值的描述。以下是COBOL中使用的数据描述条目-
Redefines子句用于定义具有不同数据描述的存储。如果一个或多个数据项未同时使用,则同一存储可用于另一数据项。因此,相同的存储可以引用不同的数据项。
以下是Redefines子句的语法-
01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).
以下是使用的参数的详细信息-
重新定义的项目和重新定义的项目的级别编号必须相同,并且不能为66或88的级别编号。请勿将VALUE子句与重新定义项一起使用。在“文件部分”中,请勿使用带有01级编号的redefines子句。重新定义定义必须是您要重新定义的下一个数据描述。重新定义的项目将始终具有与重新定义的项目相同的值。
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DESCRIPTION.
05 WS-DATE1 VALUE '20140831'.
10 WS-YEAR PIC X(4).
10 WS-MONTH PIC X(2).
10 WS-DATE PIC X(2).
05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8).
PROCEDURE DIVISION.
DISPLAY "WS-DATE1 : "WS-DATE1.
DISPLAY "WS-DATE2 : "WS-DATE2.
STOP RUN.
JCL执行上述COBOL程序-
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它将产生以下结果-
WS-DATE1 : 20140831
WS-DATE2 : 20140831
重命名子句用于为现有数据项赋予不同的名称。它用于重新分组数据名称并为其赋予新名称。新的数据名称可以跨组或基本项目重命名。级别号66保留用于重命名。
句法
以下是Renames子句的语法-
01 WS-OLD.
10 WS-A PIC 9(12).
10 WS-B PIC X(20).
10 WS-C PIC A(25).
10 WS-D PIC X(12).
66 WS-NEW RENAMES WS-A THRU WS-C.
重命名只能在相同级别上进行。在上面的示例中,WS-A,WS-B和WS-C处于同一级别。重命名定义必须是您要重命名的下一个数据描述。不要将重命名与级别号01或77一起使用。用于重命名的数据名称必须按顺序排列。带有出现子句的数据项不能重命名。
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DESCRIPTION.
05 WS-NUM.
10 WS-NUM1 PIC 9(2) VALUE 20.
10 WS-NUM2 PIC 9(2) VALUE 56.
05 WS-CHAR.
10 WS-CHAR1 PIC X(2) VALUE 'AA'.
10 WS-CHAR2 PIC X(2) VALUE 'BB'.
66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2.
PROCEDURE DIVISION.
DISPLAY "WS-RENAME : " WS-RENAME.
STOP RUN.
JCL执行上述COBOL程序-
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它将产生以下结果-
WS-RENAME : 56AABB
Usage子句指定存储格式数据的操作系统。不能与级别号66或88一起使用。如果在组上指定了用法子句,则所有基本项目将具有相同的用法子句。 Usage子句可用的不同选项如下-
数据项以ASCII格式存储,每个字符将占用1个字节。这是默认用法。
以下示例计算所需的字节数-
01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It requires 8 bytes as sign and decimal doesn't require any byte.
01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It requires 5 bytes as sign.
数据项以二进制格式存储。此处,数据项必须为整数。
以下示例计算所需的字节数-
01 WS-NUM PIC S9(n) USAGE IS COMP.
If 'n' = 1 to 4, it takes 2 bytes.
If 'n' = 5 to 9, it takes 4 bytes.
If 'n' = 10 to 18, it takes 8 bytes.
数据项类似于实数或浮点数,并表示为单个精度浮点数。在内部,数据以十六进制格式存储。 COMP-1不接受PIC子句。 1个字等于4个字节。
数据项类似于Long或Double,并表示为双精度浮点数。在内部,数据以十六进制格式存储。 COMP-2没有指定PIC子句。此处2个字等于8个字节。
数据项以压缩十进制格式存储。每个数字占用半个字节(1个半字节),符号存储在最右边的半字节中。
以下示例计算所需的字节数-
01 WS-NUM PIC 9(n) USAGE IS COMP.
Number of bytes = n/2 (If n is even)
Number of bytes = n/2 + 1(If n is odd, consider only integer part)
01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
It requires 2 bytes of storage as each digit occupies half a byte.
01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
It requires 3 bytes of storage as each digit occupies half a byte.
COBOL抄写本是定义数据结构的代码选择。如果许多程序中使用了特定的数据结构,则可以使用抄写本,而不是再次编写相同的数据结构。我们使用COPY语句在程序中包含一个抄写本。 COPY语句在WorkingStorage部分中使用。
以下示例在COBOL程序中包含一个抄写本-
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.
这里的ABC是字帖名称。 ABC抄写本中的以下数据项可在程序内使用。
01 WS-DESCRIPTION.
05 WS-NUM.
10 WS-NUM1 PIC 9(2) VALUE 20.
10 WS-NUM2 PIC 9(2) VALUE 56.
05 WS-CHAR.
10 WS-CHAR1 PIC X(2) VALUE 'AA'.
10 WS-CHAR2 PIC X(2) VALUE 'BB'.