- COBOL 教程
- COBOL - 首页
- COBOL - 概述
- COBOL - 环境设置
- COBOL - 程序结构
- COBOL - 基本语法
- COBOL - 数据类型
- COBOL - 基本动词
- COBOL - 数据布局
- COBOL - 条件语句
- COBOL - 循环语句
- COBOL - 字符串处理
- COBOL - 表处理
- COBOL - 文件处理
- COBOL - 文件组织
- COBOL - 文件访问模式
- COBOL - 文件处理动词
- COBOL - 子程序
- COBOL - 内部排序
- COBOL - 数据库接口
- COBOL 有用资源
- COBOL - 问答
- COBOL - 快速指南
- COBOL - 有用资源
COBOL - 数据布局
COBOL 布局是对每个字段的用途及其所含值的描述。以下是 COBOL 中使用的数据描述条目:
- REDEFINES 子句
- RENAMES 子句
- USAGE 子句
- Copybooks (复制本)
REDEFINES 子句
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).
以下是所用参数的详细信息:
- WS-OLD 是被重新定义的项
- WS-NEW1 和 WS-NEW2 是重新定义的项
被重新定义项和重新定义项的级别号必须相同,并且不能是 66 或 88 级别号。不要对重新定义的项使用 VALUE 子句。在文件段中,不要对 01 级别号使用 REDEFINES 子句。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
RENAMES 子句
RENAMES 子句用于为现有数据项赋予不同的名称。它用于重新分组数据名称并为其赋予新名称。新的数据名称可以在组或基本项之间重命名。66 级别号保留用于 RENAMES。
语法
以下是 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 处于同一级别。RENAMES 定义必须是您要重命名的下一个数据描述。不要将 RENAMES 与 01 或 77 级别号一起使用。用于 RENAMES 的数据名称必须按顺序排列。具有 OCCURS 子句的数据项不能重命名。
示例
在线演示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 子句
USAGE 子句指定存储格式数据的操作系统。它不能与 66 或 88 级别号一起使用。如果在组上指定了 USAGE 子句,则所有基本项都将具有相同的 USAGE 子句。USAGE 子句可用的不同选项如下:
DISPLAY
数据项以 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.
COMPUTATIONAL / COMP
数据项以二进制格式存储。此处,数据项必须是整数。
以下示例计算所需的字节数:
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
数据项类似于 Real 或 Float,表示为单精度浮点数。在内部,数据以十六进制格式存储。COMP-1 不接受 PIC 子句。此处,1 个字等于 4 个字节。
COMP-2
数据项类似于 Long 或 Double,表示为双精度浮点数。在内部,数据以十六进制格式存储。COMP-2 不指定 PIC 子句。此处,2 个字等于 8 个字节。
COMP-3
数据项以打包十进制格式存储。每个数字占用半个字节(1 个 nibble),符号存储在最右边的 nibble。
以下示例计算所需的字节数:
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.
Copybooks (复制本)
COBOL 复制本是定义数据结构的代码选择。如果特定数据结构在许多程序中使用,则无需再次编写相同的数据结构,而是可以使用复制本。我们使用 COPY 语句在程序中包含复制本。COPY 语句用于 Working-Storage 段。
以下示例在 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'.