COBOL布局是使用每個字段的說明和值出現(xiàn)。以下是在COBOL中使用的數(shù)據(jù)描述項:
重新定義子句用于定義相同的存儲與不同的數(shù)據(jù)的描述。如果一個或多個數(shù)據(jù)項都不會同時使用,則在相同的存儲可用于另一個數(shù)據(jù)項。所以同一個存儲可以被稱為具有不同的數(shù)據(jù)項。
語法
以下是語法重新定義子句:
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是重新定義的項
WS-NEW1 和 WS-NEW2 是重新定義的項
重新定義的信息并重新確定項目的級別數(shù)必須是相同的,它不能是66或88級數(shù)。不要使用VALUE子句與重新定義項。在文件部分,不要使用重定義子句與01級號。重新定義的定義必須要重新定義下一個數(shù)據(jù)描述。重新定義的項目將始終具有相同的值重新定義的項。
例子
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程序執(zhí)行。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
當(dāng)編譯并執(zhí)行上面的程序它會產(chǎn)生以下結(jié)果:
WS-DATE1 : 20140831 WS-DATE2 : 20140831
重命名子句用于為現(xiàn)有的數(shù)據(jù)項賦予不同的名稱。它被用于重新組數(shù)據(jù)的名稱,并將它們賦予了新名字。新的數(shù)據(jù)名稱可以跨組或基本項目重新命名。 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處于同一水平。重命名定義必須要重命名的下一個數(shù)據(jù)描述。不要使用重命名為01,77或66級數(shù)。用于重命名數(shù)據(jù)名稱必須為一個序列。當(dāng)前子句數(shù)據(jù)項不能被重新命名。
例子
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程序執(zhí)行。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
當(dāng)編譯并執(zhí)行上面的程序它會產(chǎn)生以下結(jié)果:
WS-RENAME : 56AABB
用法子句通知,其中格式數(shù)據(jù)被存儲在操作系統(tǒng)。它不能用于具有66或88級數(shù)。如果用法子句在組中指定了所有的基本項目將有相同的用法子句。以下是不同的選擇和使用子句:
數(shù)據(jù)項被存儲在ASCII格式和每個字符需要1個字節(jié)。這是缺省情況下使用。
例如,計算所需的字節(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.
數(shù)據(jù)項被存儲在二進(jìn)制格式。在這個數(shù)據(jù)項必須是整數(shù)。
例如,計算所需的字節(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.
數(shù)據(jù)項是類似于實數(shù)或浮點數(shù),并表示為單精度浮點數(shù)。內(nèi)部數(shù)據(jù)存儲在十六進(jìn)制格式。在這種不指定PIC子句。在這里,1字等于4個字節(jié)。
數(shù)據(jù)項是類似龍或雙并表示為雙精度浮點數(shù)。內(nèi)部數(shù)據(jù)存儲在十六進(jìn)制格式。在這種不指定PIC子句。這2個字等于8個字節(jié)。
數(shù)據(jù)項是包十進(jìn)制格式存儲。每個數(shù)字占半個字節(jié)(1四位)和符號儲存在最右邊四位。
例如,計算所需的字節(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.
COBOL復(fù)寫簿選擇定義數(shù)據(jù)結(jié)構(gòu)的代碼。如果一個特定的數(shù)據(jù)結(jié)構(gòu)用于寫入相同數(shù)據(jù)結(jié)構(gòu)的多個程序然后代替再次,我們可以使用復(fù)寫簿。我們使用COPY語句,包括復(fù)寫簿程序。 COPY語句用在工作-存儲部分。
例子包顯示復(fù)寫簿的COBOL程序:
DATA DIVISION. WORKING-STORAGE SECTION. COPY ABC.
在這里,ABC是復(fù)寫簿的名字。下面在ABC字帖數(shù)據(jù)項可以使用內(nèi)部程序。
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'.