个性化阅读
专注于IT技术分析

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.

在这里, 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'.

赞(0)
未经允许不得转载:srcmini » COBOL-数据布局

评论 抢沙发

评论前必须登录!