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