COBOLプログラミングについてはじめての方でもわかるように図解を取り入れわかりやすく解説しているCOBOL入門サイトです。
COBOL(COmmon Business Oriented Language)はアメリカで生まれた事務処理のための高級言語です。
COBOLが開発されたのが1959年9月。
誕生したのがもう半世紀以上も前のことです。
その当時、COBOL以外にもさまざまなプログラミング言語が存在しています。
高級言語としてはFORTRANやLIPSが代表例と言えるでしょう。
現在のように音楽や動画などのマルチメディアをコンピュータで楽しむことなんてまったくない時代。
インターネットもまだ生まれていません。
そんな時代にどんなシステムが開発されていたのかというと、弾道計算に代表される科学技術計算などの研究者向けのシステムと給与計算に代表される事務処理系システムが主だったそうです。
FORTRANは科学技術計算用、LIPSは人工知能の研究・開発に主に使われていたプログラミング言語でしたが、それらの言語はその特性上、事務処理系のプログラム開発には向いていません。
しかし、事務処理系のプログラムのニーズも高く、効率良く開発できるプログラミング言語が求められるようになりました。
そのような背景のもと、事務処理系のプログラム開発に最適化されたCOBOLが開発されました。
高級言語の誕生年表[図1]
COBOLプログラムは、全体が4つの部に分かれて構成されます。
さらに各部にはいくつかの節や段落に分けられています。
それぞれの部で、それぞれの役割が明確になっているのがCOBOLのひとつの特徴であり、COBOLソースは可読性が高いと言われるひとつの要因と言えます。
しかしその点が、他言語プログラマがはじめてCOBOLを用いるときにつまづきやすいところでもあります。
例えば、VBでは変数をソース上のどこででも宣言することができますが、COBOLではデータ部でしかできません。
ささいなことのようですが、VBプログラマにとって意外と不便に感じられる点と言えるでしょう。
下図はCOBOLプログラムの全体構成になります。
まずは見出し部(IDENTIFICATION DIVISION)からはじまり、環境部(ENVIRONMENT DIVISION)、データ部(DATA DIVISION)、手続き部(PROCEDURE DIVISION)と続きます。
見出し部(IDENTIFICATION DIVISION)
環境部(ENVIRONMENT DIVISION)
データ部(DATA DIVISION)
手続き部(PROCEDURE DIVISION)
見出し部(IDENTIFICATION DIVISION)はCOBOLプログラムで最初に記述する部になります。
見出し部には、プログラム名やその作成者、作成日などのプログラムのメンテナンス情報を記述します。
それらを見出し部内の段落として記述していくことになります。
見出しに含まれる段落
見出し部 | 段落 |
IDENTIFICATION DIVISION-- | --PROGRAM-ID プログラム名 |
L--AUTHOR プログラムの作成者 | |
L--DATE-WRITTEN プログラム作成日 | |
L--DATE-COMPILED コンパイル日 | |
L--INSTALLATION インストール先 | |
L--SECURITY 機密事項 |
なお、見出し部には節(SECTION)は存在しません。
下記は実際の記述例です。
000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. SAMPLE001. 000030 AUTHOR. T-KATO. 000040 DATE-WRITTEN. 2012/3/16. 000050 DATE-COMPILED. 2012/3/16.
環境部(ENVIRONMENT DIVISION)はCOBOLプログラムで2番目に記述する部になります。
環境部には、作成しようとしているプログラムを翻訳(コンパイル)するコンピュータ名や実行するコンピュータ名、さらに使用する環境変数の受け渡し情報やプログラムから読み書きするファイルの名前や種類などを定義します。
通信部に含まれる節と段落
環境部 | 節 | 段落 |
ENVIRONMENT DIVISION--- | --- CONFIGURATION SECTION 構成節 | |
L-- SOURCE-COMPUTER 翻訳するコンピュータ名 | ||
L-- OBJECT-COMPUTER 実行するコンピュータ名 | ||
L-- INPUT-OUTPUT SECTION 入出力節 | ||
L-- FILE-CONTROL ファイル管理 |
下記は実際の記述例です。
000070 ENVIRONMENT DIVISION. 000080 CONFIGURATION SECTION. 000090 SOURCE-COMPUTER. MYCOMPUTER. 000100 OBJECT-COMPUTER. MYCOMPUTER. 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.
翻訳するコンピュータ名(SOURCE-COMPUTER)や実行するコンピュータ名(OBJECT-COMPUTER)段落はプログラムの動作に影響することはない段落であるため、省略されることが多いです。
しかし、ファイル管理(FILE-CONTROL)段落などは影響があるのでファイルの入出力を行うのであれば、しっかりと記述する必要があります。
具体的な記述方法に関しては後の記事で紹介します。
データ部はCOBOLプログラムで3番目に記述する部になります。
これまでの部がCOBOLプログラムを作り上げていく上での事前準備のようなものと言え、ここからの部がプログラムを実際に作り上げていく箇所になります。
データ部では、入出力ファイルのレイアウト、データ項目(変数)、外部プログラムとのインターフェイス(引数)などプログラム上で取り扱う全てのデータを定義します。
通信部に含まれる節
データ部 | 節 |
DATA DIVISION --- | --- FILE SECTION ファイル |
L-- WORKING-STORAGE SECTION 作業場所 | |
L-- LINKAGE SECTION 連絡 | |
L-- COMMUNICATION SECTION 通信 | |
L-- REPORT SECTION レポート |
作業場所節(WORKING-STORAGE SECTION)ではプログラム上で使用する全ての変数定義を行います。
連絡節(LINKAGE SECTION)は外部プログラムとのデータのやり取りに関する情報を定義します。
(C言語でいう、main()関数の引数にあたります。)
また、COBOLでは入出力ファイルのレイアウトをファイル節(FILE SECTION)で明確に定義します。
他にも通信節とレポート節があります。
下記は実際の記述例です。
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). 000270 LINKAGE SECTION. 000280 REPORT SECTION. 000290 SCREEN SECTION.
各節にはそれぞれ段落があります。
具体的な記述方法に関しては後の記事で紹介します。
手続き部(PROCEDURE DIVISION)はCOBOLプログラムで最後に記述する部になります。
手続き部では、プログラムが行う処理内容を記述していきます。
これまでの部と違い、手続き部には規定の節や段落は存在しません。
それらはプログラム作成者が必要に応じて作成していくことになります。
節がC言語で言うところの、関数にあたります。
段落は節の中をさらに小さく括った処理のまとまりになります。
下記は実際の記述例です。
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.
行番「000320」から「000360」までが、このプログラムのメイン処理となります。
(C言語で言う、main()関数にあたります。)
行番「000380」(INIT-PROC)から「000450」(INIT-PROC-EXIT)までがひとつの節となります。
(C言語で言う、関数にあたります。)