COBOL - 数据布局

17 Mar 2025 | 5 分钟阅读

COBOL 布局是对每个字段及其值的用法的描述。 COBOL 中的数据描述条目如下

  • Redefines 条目
  • Renames 条目
  • Usage 子句
  • Copybooks

Redefines 条目

Redefines 子句使用各种数据描述定义存储。 如果同时使用一个或多个数据项,则可以使用其他数据项的相同存储。

语法

这里,data-name1/FILLER 是 REDEFINING 数据项。 而 data-name2 是 REDEFINED 数据项。

REDEFINED 数据项可以被重新定义任意次数。 但是不能重新定义 REDEFINING 项。

示例

这里,A 是 Redefined 项,B 和 C 是 Redefining 项。

重新定义项和重新定义项的级别号必须相同,并且级别号不能是 66 或 88。 使用重新定义对象,我们不能使用 VALUE 子句。

输出

COBOL Data Layout

Renames 子句

Renames 子句使用不同的名称呈现现有数据项。 它用于重新组装数据的名称并赋予它们一个新名称。 我们可以为基本项或组重命名数据的新名称。 Renames 子句保留在级别 66。

语法

这里,data-name-1 是逻辑组的备用名称。

Data-name-2 是一个起始基本项,而 data-name-3 结束基本数据项,在基本组中。 如果未提及 data-name-3,则 data-name-2 必须是一个组项,并且此 RENAMED 下的所有基本项都必须是 data-name-1 项。

Renames 子句有一些规则

  • RENAMES 条目必须按顺序排列。
  • 级别号 66 没有 PIC 子句。
  • 在组的末尾,必须对 RENAMES 进行编码。
  • Level-66 无法重命名 level-01、77、88 或另一个 level-66 条目。
  • 不应将 OCCURS 子句用于 RENAMED 基本项。

示例

让我们通过 COBOL 程序看一个例子

输出

COBOL Data Layout

Usage 子句

用法子句用于定义数据存储在文件中的操作系统。 使用级别号 66 或 88,我们可以使用它。 如果在组中提到了 usage 子句,则相同的 usage 子句将应用于所有基本项。

Usage 子句减少了存储空间,这隐式提高了程序的效率。

以下是 usage 子句可用的不同选项

显示

Display 子句是默认的计算。 数据项以 ASCII 格式存储在此子句中,并且每个字符将占用 1 个字节。 数据在此处以十进制形式存储。 显示子句适用于所有数据类型。

下面给出了 Display usage 子句的内存分配

图片 (Picture)字节数
91
X1
A1

表示,1 位/字符 = 1 字节

以下示例计算所需的字节数

COMP/COMPUTATION

我们可以将 COMP usage 子句称为 BINARY 或 COMPUTATION。 数据项以二进制格式存储。 在这里,数据项必须是整数。

下面给出了 COMP Usage 子句的内存分配

图片 (Picture)字节数
S9 到 S9 (4)2
S9(5) 到 S9(9)4
S9(9) 到 S9(18)8

示例

COMP-1/COMPUTATION-1

数据项相当于 Float 或 Real,表示为单精度浮点数。 数据在内部以十六进制格式存储。 COMP-1 不接受 PIC 子句。 这里一个字等于 4 个字节。

COMP-1 内存计算如下

图片 (Picture)字节数
9(16)- 1 字4

COMP-2/ COMPUTATION-2

数据项类似于 long 或 double,并定义为双精度浮点数。 数据在内部以十六进制格式存储。 COMP-2 没有定义 PIC 子句。 这里 2 个字等于 8 个字节。

图片 (Picture)字节数
9(32)- 2 字8

COMP-3/ COMPUTATION-3

数据项以打包十进制格式存储。 每个数字占用半个字节(1 个 nibble),并且符号存储在右侧的 nibble 中。

图片 (Picture)字节数
9½ 字节

计算所需字节数的公式

Copybooks

COBOL copybook 是一个代码选择,用于指定数据的结构。 如果我们在许多应用程序中使用特定的数据结构,我们可以使用 copybooks 而不是一遍又一遍地编写相同的数据结构。 要将 copybook 添加到程序中,我们使用 COPY 语句。 我们只能在 Working Storage Section 中使用 COPY 语句。

以下示例在 COBOL 程序中添加一个 copybook

这里,ABC 是 copybook 名称。 ABC copybook 中的以下数据项可以在程序中使用


下一个主题COBOL 条件语句