COBOL 數(shù)據(jù)布局

2020-11-25 18:41 更新

COBOL布局是每個(gè)字段的使用及展現(xiàn)價(jià)值的描述,以下是COBOL中使用的數(shù)據(jù)描述項(xiàng):

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

Redefines(重定義)子句

重定義子句用于定義具有不同數(shù)據(jù)描述的存儲(chǔ)。如果一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)不被同時(shí)使用,那么可以將相同的存儲(chǔ)用于另一個(gè)數(shù)據(jù)項(xiàng)。因此,可以使用不同的數(shù)據(jù)項(xiàng)來(lái)引用相同的存儲(chǔ)。

語(yǔ)法

以下是重定義子句的語(yǔ)法:

01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).

以下是使用的參數(shù)的詳細(xì)信息:

  • WS-OLD是重定義項(xiàng)
  • WS-NEW1和WS-NEW2是重定義項(xiàng)

重定義項(xiàng)的級(jí)數(shù)和重定義項(xiàng)必須是相同的,它不能是66或88級(jí)數(shù)。不要使用有重定義項(xiàng)的VALUE子句。在文件節(jié)(File section)中,不要使用01級(jí)數(shù)的重定義子句。重定義所定義的必須是你想要重新定義的下一個(gè)數(shù)據(jù)描述。一個(gè)重新定義的項(xiàng)目將始終具有相同的值。

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執(zhí)行上述COBOL程序。

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

當(dāng)你編譯和執(zhí)行上面的程序,會(huì)產(chǎn)生以下結(jié)果:

WS-DATE1 : 20140831
WS-DATE2 : 20140831 

Renames(重命名)子句

重命名子句用于給現(xiàn)有的數(shù)據(jù)項(xiàng)賦予不同的名稱。它用于重組數(shù)據(jù)名稱,并給它們一個(gè)新的名稱。新的數(shù)據(jù)名稱可以跨越組項(xiàng)或基本項(xiàng)重命名。級(jí)數(shù)66保留用于重命名。

語(yǔ)法

以下是重命名子句的語(yǔ)法:

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.

重命名只能在同一級(jí)。在上面的例子中,WS-A,WS-B和WS-C是在同一級(jí)。重命名所定義的必須是你想要要重命名的下一個(gè)數(shù)據(jù)描述。不要使用01,77或者66級(jí)的重命名。用于重命名的數(shù)據(jù)名稱必須按順序排列。帶有occur子句的數(shù)據(jù)項(xiàng)不能被重命名。

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執(zhí)行上述COBOL程序。

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

當(dāng)你編譯和執(zhí)行上面的程序,會(huì)產(chǎn)生以下結(jié)果:

WS-RENAME : 56AABB

Usage(用法)子句

用法子句指定存儲(chǔ)格式數(shù)據(jù)的操作系統(tǒng)。它不能與級(jí)數(shù)66或88一起使用。如果在組項(xiàng)上指定了用法子句,那么所有的基本項(xiàng)都將具有相同的用法子句。用法子句提供的不同選項(xiàng)如下:

Display

數(shù)據(jù)項(xiàng)以ASCII格式存儲(chǔ),每個(gè)字符將占用1個(gè)字節(jié)。這是默認(rèn)的用法。

以下示例計(jì)算所需的字節(jié)數(shù):

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

數(shù)據(jù)項(xiàng)以二進(jìn)制格式存儲(chǔ)。這里,數(shù)據(jù)項(xiàng)必須是整數(shù)。

以下示例計(jì)算所需的字節(jié)數(shù):

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

數(shù)據(jù)項(xiàng)類(lèi)似于實(shí)數(shù)或浮點(diǎn)數(shù)型,表示為單精度浮點(diǎn)數(shù)。在內(nèi)部,數(shù)據(jù)以十六進(jìn)制格式存儲(chǔ)。 COMP-1不接受PIC子句。這里1個(gè)詞是等于4個(gè)字節(jié)。

COMP-2

數(shù)據(jù)項(xiàng)類(lèi)似于長(zhǎng)整型或雙精度型,表示為雙精度浮點(diǎn)數(shù)。在內(nèi)部,數(shù)據(jù)以十六進(jìn)制格式存儲(chǔ)。 COMP-2不指定PIC子句。這里2個(gè)詞等于8個(gè)字節(jié)。

COMP-3

數(shù)據(jù)項(xiàng)以壓縮的十進(jìn)制格式存儲(chǔ)。每個(gè)數(shù)字占據(jù)半個(gè)字節(jié)(1個(gè)半字節(jié)),符號(hào)存儲(chǔ)在最右邊的半字節(jié)。

以下示例計(jì)算所需的字節(jié)數(shù):

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是定義數(shù)據(jù)結(jié)構(gòu)的代碼選擇。如果一個(gè)特定的數(shù)據(jù)結(jié)構(gòu)應(yīng)用于許多程序中,那么我們可以使用copybook替代再次編寫(xiě)相同的數(shù)據(jù)結(jié)構(gòu)。我們使用COPY語(yǔ)句在程序中添加一個(gè)copybook。COPY語(yǔ)句用于工作存儲(chǔ)節(jié)(Working-Storage section)。

以下示例為COBOL程序中Copybook

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

這里ABC是Copybooks名稱。以下在ABC copybook中的數(shù)據(jù)項(xiàng)可以在程序中使用。

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'.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)