COBOL数据布局 - COBOL教程
COBOL布局是使用每个字段的说明和值出现。以下是在COBOL中使用的数据描述项:
- 重新定义子句
- 重命名子句
- 用法子句
- 复写簿
重新定义子句
重新定义子句用于定义相同的存储与不同的数据的描述。如果一个或多个数据项都不会同时使用,则在相同的存储可用于另一个数据项。所以同一个存储可以被称为具有不同的数据项。
语法
以下是语法重新定义子句:
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级号。重新定义的定义必须要重新定义下一个数据描述。重新定义的项目将始终具有相同的值重新定义的项。
例子
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
重命名子句
重命名子句用于为现有的数据项赋予不同的名称。它被用于重新组数据的名称,并将它们赋予了新名字。新的数据名称可以跨组或基本项目重新命名。 66级号在重命名保留。
语法
以下是重命名子句的语法:
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处于同一水平。重命名定义必须要重命名的下一个数据描述。不要使用重命名为01,77或66级数。用于重命名数据名称必须为一个序列。当前子句数据项不能被重新命名。
例子
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
用法子句
用法子句通知,其中格式数据被存储在操作系统。它不能用于具有66或88级数。如果用法子句在组中指定了所有的基本项目将有相同的用法子句。以下是不同的选择和使用子句:
显示
数据项被存储在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.
计算/ 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
数据项是类似于实数或浮点数,并表示为单精度浮点数。内部数据存储在十六进制格式。在这种不指定PIC子句。在这里,1字等于4个字节。
COMP-2
数据项是类似龙或双并表示为双精度浮点数。内部数据存储在十六进制格式。在这种不指定PIC子句。这2个字等于8个字节。
COMP-3
数据项是包十进制格式存储。每个数字占半个字节(1四位)和符号储存在最右边四位。
例如,计算所需的字节数:
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.
复写薄
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'.