COBOL-数据布局

本文概述

  • 重新定义条目
  • 重命名条款
  • 使用条款
  • 字帖
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.

输出如下:
COBOL-数据布局

文章图片
重命名条款 重命名子句以不同的名称显示现有数据项。它用于重组数据名称并为其赋予新名称。我们可以为基本项目或组重命名数据的新名称。重命名子句在级别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.

输出如下:
COBOL-数据布局

文章图片
使用条款 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.

【COBOL-数据布局】在这里, 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'.

    推荐阅读