本文概述
COBOL布局是每个字段的用法及其值的描述。 COBOL中的数据描述条目如下:
- 重新定义条目
- 重命名条目
- 使用条款
- 字帖
重新定义条目
Redefines子句使用各种数据描述来定义存储。如果同时使用一个或多个数据项, 则可以为其他数据项使用相同的存储。
语法如下:
level-number data-name1/FILLER REDEFINES data-name2
此处, data-name1 / FILLER是REDEFINING日期项。而data-name2是REDEFINED数据项。
可以多次重新定义REDEFINED数据项。但是无法重新定义REDEFINING项目。
例子:
01 A PIC X(10).
01 B REDEFINES A PIC X(10).
01 C REDEFINES A PIC X(09).
在这里, A是”重新定义”项目, B和C是”重新定义”项目。
重新定义的项目和重新定义的项目的级别编号必须相同, 并且级别编号不能为66或88。对于重新定义的对象, 我们不能使用VALUE子句。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DESCRIPTION.
05 WS-DATE1 VALUE 20191204.
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.
输出如下:
重命名条款
重命名子句以不同的名称显示现有数据项。它用于重组数据名称并为其赋予新名称。我们可以为基本项目或组重命名数据的新名称。重命名子句在级别66处保留。
语法如下:
66 data-name-1 RENAMES data-name-2
[THROUGH/THRU data-name-3]
在这里, data-name-1是逻辑组的备用名称。
数据名称2是起始基本项目, 数据名称3是基本组中的基本数据项目。如果未提及data-name-3, 则data-name-2必须是一个组项, 并且此RENAMED下的所有基本项都必须是data-name-1项。
RENAMES子句有一些规则:
- RENAMES条目必须按顺序排列。
- 66级数字没有PIC子句。
- 在组的末尾, 必须对RENAMES进行编码。
- 级别66无法重命名级别01、77、88或其他级别66条目。
- OCCURS子句不应用于重命名基本项目。
例子:
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.
让我们看一下通过COBOL程序的一个示例:
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.
输出如下:
使用条款
using子句用于定义将数据存储在文件中的操作系统。对于66或88级, 我们可以使用它。如果在组中提到了用法子句, 则相同的用法子句将应用于所有基本项目。
使用子句减少了存储空间, 从而暗中提高了程序的效率。
以下给出了use子句可用的不同选项:
显示
Display子句是默认计算。数据项以ASCII格式存储在此子句中, 每个字符占用1个字节。数据以十进制形式存储在此处。 display子句适用于所有数据类型。
显示使用情况子句的内存分配如下:
图片 | 字节数 |
---|---|
9 | 1 |
X | 1 |
一个 | 1 |
表示1位数字/字符= 1个字节
下面的示例计算所需的字节数:
01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It will require 8 bytes as sign and decimal doesn't require any byte.
01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It will require 5 bytes as a sign.
压缩/计算
我们可以将COMP用法子句称为BINARY或COMPUTATION。数据项以二进制格式存储。在此, 数据项必须为整数。
下面给出了COMP Usage子句的内存分配:
图片 | 字节数 |
---|---|
S9 TO S9 (4) | 2 |
S9(5)至S9(9) | 4 |
S9(9)至S9(18) | 8 |
例子:
01 WS-NUM PIC S9(n) USAGE IS COMP.
If 'n' = 1 to 4, it will take 2 bytes.
If 'n' = 5 to 9, it will take 4 bytes.
If 'n' = 10 to 18, it will take 8 bytes.
COMP-1 / COMPUTATION-1
等于Float或Real的数据项表示为单精度浮点数。数据以十六进制格式存储在内部。 PIC子句不被COMP-1接受。这里一个字等于4个字节。
COMP-1内存计算如下:
图片 | 字节数 |
---|---|
9(16)-1个字 | 4 |
COMP-2 / COMPUTATION-2
该数据项类似于long或double, 并且被定义为双精度浮点数。数据以十六进制格式存储在内部。 COMP-2没有定义PIC子句。此处2个字等于8个字节。
图片 | 字节数 |
---|---|
9(32)-2个字 | 8 |
COMP-3 / COMPUTATION-3
以压缩十进制格式存储数据项。每个数字占用半个字节(1个半字节), 符号存储在右侧的半字节中。
图片 | 字节数 |
---|---|
9 | ½字节 |
计算所需字节数的公式:
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 the value of n is odd, consider only integer part)
01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
It will require 2 bytes of storage as each digit occupies half a byte.
01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
It will require 3 bytes of storage as each digit occupies half a byte.
字帖
COBOL抄写本是指定数据结构的代码选择。如果我们在许多应用程序中使用特定的数据结构, 则可以使用抄写本, 而不是一遍又一遍地写相同的数据结构。要将抄写本添加到程序中, 我们使用COPY语句。在工作存储部分, 我们只能使用COPY语句。
以下示例在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'.
评论前必须登录!
注册