C6-COBOL 数据布局

cobol 专栏收录该内容
16 篇文章 1 订阅

COBOL 数据布局

COBOL布局是每个字段的使用及展现价值的描述,以下是COBOL中使用的数据描述项:

  • Redefines(重定义)子句
  • Renames(重命名)子句
  • Usage(用法)子句
  • Copybook

Redefines(重定义)子句

重定义子句用于定义具有不同数据描述的存储。如果一个或多个数据项不被同时使用,那么可以将相同的存储用于另一个数据项。因此,可以使用不同的数据项来引用相同的存储。
作用:不同的数据项可以共用内存中的同一段空间。例如已给数据项A分配了一段内存空间,在经过某一段的过程后,A已经不再使用了,但它仍占着内存这部分空间,为了节约内存,可以将另一数据项B也分配在A所占的这段内存空间。

语法

以下是重定义子句的语法:

        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子句。在文件节(File section)中,不要使用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

Renames(重命名)子句

重命名子句用于给现有的数据项赋予不同的名称。它用于重组数据名称,并给它们一个新的名称。新的数据名称可以跨越组项或基本项重命名。级数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级的重命名。用于重命名的数据名称必须按顺序排列。带有occur子句的数据项不能被重命名。

        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(用法)子句

用法子句指定存储格式数据的操作系统。它不能与级数66或88一起使用。如果在组项上指定了用法子句,那么所有的基本项都将具有相同的用法子句。用法子句提供的不同选项如下:

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

数据项类似于实数或浮点数型,表示为单精度浮点数。在内部,数据以十六进制格式存储。 COMP-1不接受PIC子句。这里1个词是等于4个字节。

COMP-2

数据项类似于长整型或双精度型,表示为双精度浮点数。在内部,数据以十六进制格式存储。 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.

Copybook

COBOL的Copybook是定义数据结构的代码选择。如果一个特定的数据结构应用于许多程序中,那么我们可以使用copybook替代再次编写相同的数据结构。我们使用COPY语句在程序中添加一个copybook。COPY语句用于工作存储节(Working-Storage section)。
作用:把“源程序库”中的某些记录描述和数据描述插入到自己的源程序中。
格式:COPY 库名 [REPLACING 标识符1/常量1/字1 BY 标识符2/常量2/字2]

以下示例为COBOL程序中Copybook:

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

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

        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
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值