- はじめに
前回の「COBOLの私見」より、簡単ではありますがCOBOLの構成について初心者でもわかりやすく説明したいと思います。
※「COBOLの私見」
https://qiita.com/masahikoaoyama/items/2388ea7e25dbd9227989
- コーディング(記述)フォーマット
COBOLではをコーディング(記述)していく上でルールがあります。
1行は80文字以内、その80文字の中で5つの領域に分けてコーディング(記述)を行います。
それぞれの領域には何を記述するのかが定められています。
・ 一連番号領域
先頭から6文字分を「一連番号領域」としてプログラムの行番号を6桁の数字で記述します。
※自動採番で行番号を設定される場合もあるので、コーディング(記述)時では意識する必要はありません。
・標識領域
先頭から7文字目を「標識領域」として、「*」を設定することにより、コメント行として空白の場合はCOBOLのコードとして認識されます。
・A領域
先頭から8~11文字目までを「A領域」として、各部の開始宣言、段落の宣言、データ項目のレベル番号をこの領域の先頭から書き始めます。
・B領域
先頭から12~72文字目までを「B領域」として、手続き部の命令文や作業領域のレベル番号などを記述します。
・見出し領域
先頭から73~80文字目までを「見出し領域」となります。
見出し領域は、翻訳対象外の領域であり、プログラムの修正日や修正者名などのコメント的な記述を行ったりします。
※意外と忘れがちでこの領域までコーディングを行いコンパイルエラーがでることがあります。
- コーディング(記述)ルール
・ピリオド(終止符)
COBOLでは、部、節、段落の宣言部、1つの命令文、命令ブロック(IF~END-IFなど)の終了をピリオドで示します。
+---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
000300 SAMPLE SECTION.
000310*
000320 MOVE ZERO TO X.
000330*
000340 IF X = ZERO THEN
000350 DISPLAY ”X=" X UPON CONSOLE
000360 END IF.
000370*
000380 SAMPLE-EXIT.
・改行による行継続
1つの文を複数行にまたがって記述する方法として、下図のように命令文の区切りで改行できます。
+---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
000300 MOVE
000310 ”ABCDEFGHIJKLMN”
000320 TO X.
・コメント行
先頭から73~80文字目の領域にコメントを記述することができますが、たったの8文字では記述できる内容は限られてしまいます。
プログラムの処理内容など、長いコメントを書きたい場合は、行全体をコメント行にしてしまう方法が使われます。
行をコメント行にするには標識領域にアスタリスク(*)を記述します。
+---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
000300 SAMPLE SECTION.
000310*
000320 MOVE ZERO TO X.
000330* コメント領域
000340 IF X = ZERO THEN
000350 DISPLAY ”X=" X UPON CONSOLE
000360 END IF.
000370*
000380 SAMPLE-EXIT.
- COBOLプログラムの全体構成
COBOLプログラムは、全体が4つの部に分かれて構成され、見出し部からはじまり、環境部、データ部、手続き部と続きます。
それぞれの部で、それぞれの役割が明確になっているのがCOBOLの特徴であり、COBOLの可読性が高いと言われる要因と言えます。
しかし他言語プログラマがはじめてCOBOLを用いるときにつまづきやすいところでもあります。
例えば、VBでは変数をソース上のどこででも宣言することができますが、COBOLではデータ部でしかできません。
ささいなことのようですが、他言語プログラマにとって意外と不便に感じられる点と言えるでしょう。
・見出し部(IDENTIFICATION DIVISION)
見出し部には、プログラム名やその作成者、作成日などのプログラムのメンテナンス情報を記述します。
+---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. SAMPLE.
000030 AUTHOR. NAME.
000040 DATE-WRITTEN. 2018/11/27.
000050 DATE-COMPILED. 2018/11/27.
・環境部(ENVIRONMENT DIVISION)
環境部には、作成しようとしているプログラムを翻訳(コンパイル)するコンピュータ名や実行するコンピュータ名、さらに使用する環境変数の受け渡し情報やプログラムから読み書きするファイルの名前や種類などを定義します。
+---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
000070 ENVIRONMENT DIVISION.
000080 CONFIGURATION SECTION.
000090 SOURCE-COMPUTER. SOURCECOMPUTER.
000100 OBJECT-COMPUTER. OBJECTCOMPUTER.
000110 INPUT-OUTPUT SECTION.
000120 FILE-CONTROL.
000130 SELECT IN-FILE ASSIGN TO ID01
000140 ORGANIZATION IS LINE SEQUENTIAL.
000150 SELECT OUT-FILE ASSIGN TO OD01
000160 ORGANIZATION IS LINE SEQUENTIAL.
・データ部(DATA DIVISION)
データ部では、入出力ファイルのレイアウト、データ項目(変数)、外部プログラムとのインターフェイス(引数)などプログラム上で取り扱う全てのデータ項目の定義を行います。
+---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
000180 DATA DIVISION.
000190 FILE SECTION.
000200 FD IN-FILE.
000210 01 IN-RECORD.
000220 03 IN-SYOHIN-CODE PIC X(6).
000230 03 IN-SYOHIN-NAME PIC X(30).
000240 03 IN-SYOHIN-TANKA PIC 9(8).
000250 WORKING-STORAGE SECTION.
000260 77 WRK-COUNT PIC 9(2).
・手続き部(PROCEDURE DIVISION)
手続き部では、プログラムが行う処理内容を記述していきます。
+---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
000310 PROCEDURE DIVISION.
000320 PERFORM INIT-PROC.
000330*
000340 PERFORM MAIN-PROC.
000350*
000360 STOP RUN.
000370*
000380 INIT-PROC SECTION.
000390*
000400 MOVE ZERO TO WRK-COUNT.
000410*
000420 OPEN INPUT IN-FILE.
000430 PERFORM INFILE-READ-PROC.
000440*
000450 INIT-PROC-EXIT.
000460*
000470 EXIT.
- COBOLでHello world!
COBOLプログラミングを学んでいく手始めに、他言語でもよくあるHello worldプログラムを作成してみましょう。
+---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. SAMPLE.
000030*
000040 ENVIRONMENT DIVISION.
000050*
000060 DATA DIVISION.
000070 01 OUT-REC.
000080 03 OUT-MSG PIC X(16).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000110 MOVE "Hello world!" TO OUT-MSG.
000120 DISPLAY OUT-REC UPON CONSOLE.
000130 STOP RUN.
コンパイル後実行すれば、ディスプレイに表示されるはずです。
- 最後に
長くなってしまいましたが、COBOLの基本的な構成に関しては以上になります。
未経験者の方は、機会があった場合にお役に立てればと思います。