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'.
廣告
© . All rights reserved.