COBOL系統目錄架構
COBOL系統檔案架構
以ACC91100.CBL為例,可由一般文字編輯器開啟,如記事本、Notepad++等COBOL 程式結構段落,依大小分為:部(Division)、節(Section)、段(Paragraph)、句子(Sentence)、子句(Clause)、單字(Word)及字母(Character),並有其保留字。程式結尾以 . 為結束標誌。
COBOL程式均由四個部組成
- 識別部 (IDENTIFICATION DIVISOION)
IDENTIFICATION DIVISION.
PROGRAM-ID. ACC91500.
*REMARK. [傳票(明細)ACCASP-維護]
做為該檔的基本識別,如程式名稱,作者等。
- 設備部 (ENVIRONEMNT DIVISION)
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY "SYSTEM.SEL".
COPY "ACCASP.SEL".
其中【COPY "ACCASP.SEL"】 表示會參考FMT目錄 裡的ACCASP.SEL檔 ,
並且該ACCASP.ISF 的主鍵為ACCASP-PKEY,如下所示,有色字體為COBOL保留字。
SELECT ACCASP-F
ASSIGN TO RANDOM "ACCASP.ISF"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS ACCASP-PKEY
FILE STATUS IS F-STATUS.
- 資料部 (DATA DIVISION)
DATA DIVISION.
FILE SECTION.
COPY "SYSTEM.FD".
COPY "ACCASP.FD".
WORKING-STORAGE SECTION.
01 F-REC.
05 F-PKEY.
10 F-PKEY1.
15 F-K012.
20 F-K01 PIC X(04).
20 F-K02 PIC X(08).
15 F-K03 PIC X(04).
10 F-PKEY2.
15 F-K045.
20 F-K04 PIC X(06).
20 F-K05 PIC 9(03).
15 F-K06 PIC 9(03).
05 F-01 PIC X(08).
05 F-02 PIC X(01).
主要做為資料讀取的宣告與變數宣告,其中【COPY "ACCASP.FD".】為參考FMT目錄裡的ACCASP.FD,在早期儲存檔案為 索引循序檔(Index Sequential File),為一連串數字所組成,所以需要一個索引檔去參照資料檔,定義該數字的意義。我們將ACCASP.FD打開後會看到如下:
FD ACCBAL-F
LABEL RECORD IS STANDARD
DATA RECORD IS ACCBAL-REC.
*01 ACCASP-REC. 傳票資料檔(DETAIL) - AKEY
* 05 ACCASP-PKEY.
* 10 ACCASP-PKEY1.
* 15 ACCASP-K012.
* 20 ACCASP-K01 PIC X(04).科目
* 20 ACCASP-K02 PIC X(08).子目
* 15 ACCASP-K03 PIC X(04).部門
* 10 ACCASP-PKEY2. 傳票號碼
* 15 ACCASP-K045.
* 20 ACCASP-K04 PIC X(06).年月日
* 20 ACCASP-K05 PIC 9(03).流水號
* 15 ACCASP-K06 PIC 9(03).序號
* 05 ACCASP-01 PIC X(08).立沖帳碼
* 05 ACCASP-02 PIC X(01).狀態 /A/D/P/ /
* 05 FILLER PIC X(02).
* 05 ACCASP-99 PIC 9(04) COMP-1.
COBOL 變數定義中, 01 在階層中會大於 05 而05又大於 10,以此類推,在ACCASP.ISF檔案中,
主鍵為ACCASP-PKEY. 而ACCASP-PKEY.又分成 ACCASP-PKEY1. 和 ACCASP-PKEY2. 二組主鍵,而ACCASP-PKEY1.又分成ACCASP-PKEY1.和 ACCASP-K03,因此為三維表格的概念,在COBOL變數定義中,通常以表格概念去宣告,一層就是一維表格,二層就是二維表格,以此類推。
- 程序部 (PROCEDURE DIVISION)
程序部,為一隻COBOL程式,主要程式撰寫的地方,其中,程式均由0000段開始再往下撰寫,其中
段的開頭通常為 1000-ADD. 結尾都會加上 1000-EXIT-ADD. 來區分 1000-ADD段的起始和結尾。
例:
1000-ADD.
PERFORM 7000-KEY THRU 7000-EXIT-KEY.
IF ( ESC-KEY OR F2 OR F3 OR F4 )
GO TO 1000-EXIT-ADD.
MOVE 0 TO YY.
PERFORM 7000-ITEM THRU 7000-EXIT-ITEM.
IF ( ESC-KEY OR F2 OR F3 OR F4 )
GO TO 1000-EXIT-ADD.
IF ( F10 )
NEXT SENTENCE
ELSE
IF ( F8 )
PERFORM 8100-WRITE-ACCASP.
PERFORM 9000-INITIAL-BUF.
PERFORM 9000-CLEAR-SCREEN.
GO TO 1000-ADD.
1000-EXIT-ADD.
EXIT.
進入1000-ADD 段後會執行 7000-KEY 到 7000-EXIT-KEY. 之間的程式 ,
執行完再執行
IF ( ESC-KEY OR F2 OR F3 OR F4 ) GO TO 1000-EXIT-ADD.
以此類推。
此外,程式中有時也會需要執行共用函數,像: PERFORM C900-WIN-MESSAGE
而C900-WIN-MESSAGE 會在 FMT目錄中的SYSTEM.SEC裡,執行
C900-WIN-MESSAGE.
PERFORM C900-DISPLAY-SPACE.
MOVE "CA-ERROR" TO C-LINK-PRG1.
MOVE 17 TO C-LINK-ROW.
MOVE 14 TO C-LINK-COL.
MOVE 56 TO C-LINK-SIZE.
MOVE 6 TO C-LINK-LINES.
CALL "SYS/CA-SCRN1" USING C-LINK-SCR1.
CANCEL "SYS/CA-SCRN1".
DISPLAY "[ 錯誤訊息 ]" LINE 1 POSITION 23 REVERSE COLOR P-DX.
DISPLAY L-WINDOW-MSG LINE 3 POSITION 3 COLOR P-DM.
DISPLAY " 按 Enter 繼續 .... " LINE 5 POSITION 19
BLINK COLOR P-DM.
ACCEPT OMITTED LINE 5 POSITION 38 TAB NO BEEP.
CLOSE WINDOW C-LINK-SSAVE.這段程式。
希望有幫助到一些需要COBO概念的朋友們。