
金融機関や官公庁のシステムで現在も使用され続けているCOBOL。
COBOLの基本構文は、基本的に英語が使用されているので、理解しやすいコードも多くなっています。
本記事では、そんなCOBOLの基本構文を徹底解説していきます。ぜひ日々の業務の参考にしてみてください。
・COBOLプログラムの基本構成
・COBOLの入出力処理とファイル操作の基本
・COBOLのデータ操作と計算処理の基本
1. COBOLの基本構文|初心者が押さえるべきルール
COBOLは、主に金融機関や官公庁のシステムなど、大量のデータを扱うシステムで今なお広く使われています。
COBOLを学ぶ際には、まずプログラムの基本構成やデータの扱い方、制御構文を理解することがポイントになってきます。
この章では、それらの基本ルールについて解説していきます。
COBOLプログラムの基本構成
COBOLのプログラムは、大きく下記4つの部門(DIVISION)で構成されます。
・IDENTIFICATION DIVISION(識別部門)
プログラムの名称や作成者などを記述する。
例:IDENTIFICATION DIVISION.
PROGRAM-ID.
SAMPLE-PROGRAM.
・ENVIRONMENT DIVISION(環境部門)
使用するデバイスやファイルの設定を記述する。
例:ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO ID01.
・DATA DIVISION(データ部門)
変数の宣言やファイルの定義を行う。
例:DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-VALUE PIC 9(5).
・PROCEDURE DIVISION(手続き部門)
実際の処理を記述する。
例:PROCEDURE DIVISION.
DISPLAY "Hello, COBOL!".
STOP RUN.
変数の定義とデータ型
COBOLの変数は「PIC(ピクチャー)句」を使って定義されます。代表的なデータ型には以下のようなものがあります。
- 数値データ(Numeric):
PIC 9(n)
(n桁の整数) - 文字列データ(Alphanumeric):
PIC X(n)
(n文字の文字列) - 符号付き数値(Signed Numeric):
PIC S9(n)V9(m)
(小数点付きの符号付き数値)
例:01 CUSTOMER-NAME PIC X(20). *> 20文字の文字列
01 CUSTOMER-ID PIC 9(5). *> 5桁の数値
01 BALANCE PIC S9(7)V99. *> 符号付きの7桁整数+2桁小数
基本的な制御構文
COBOLのプログラムでは、基本的に条件分岐やループを使って処理を制御します。
代表的な制御構文は下記になります。
・IF文(条件分岐)
例)IF CUSTOMER-ID = 12345
DISPLAY "正しい顧客IDです"
ELSE
DISPLAY "誤った顧客IDです".
・PERFORM(繰り返し処理)
例)PERFORM 5 TIMES
DISPLAY "処理を繰り返します".
・EVALUATE(多岐分岐)
例)EVALUATE WS-DAY
WHEN "MONDAY" DISPLAY "月曜日です"
WHEN "TUESDAY" DISPLAY "火曜日です"
WHEN OTHER DISPLAY "他の曜日です"
END-EVALUATE.
2. COBOLの入出力処理とファイル操作の基本
COBOLは業務システムで多く使われており、データを入出力する処理が多く存在しています。
入出力(I/O)処理では、画面からの入力や出力、ファイルの読み書き機能を理解することが、実用的なCOBOLプログラムを作成するための第一歩となります。
この章では、COBOLの基本的な入出力処理とファイル操作について詳しく解説します。
画面入力と出力(ACCEPT、DISPLAY文)
まずは、入力されたデータを、画面上に取り込むまでのやり取りについてです。
COBOLでは、ACCEPT
文とDISPLAY
文を使ってデータと画面とのやり取りを行います。
入力(ACCEPT文)
ACCEPT
文は、ユーザーが入力したデータをプログラム内で使用できるようにするための文です。
例:ユーザーから名前を入力し、表示するプログラム
IDENTIFICATION DIVISION.
PROGRAM-ID.
INPUT-EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME PIC X(20).
PROCEDURE DIVISION.
DISPLAY "あなたの名前を入力してください: ".
ACCEPT WS-NAME.
DISPLAY "こんにちは、" WS-NAME " さん!".
STOP RUN.
ACCEPT WS-NAME
によってユーザーが入力した文字列を WS-NAME
に格納し、DISPLAY
文で出力しています。
出力(DISPLAY文)
DISPLAY
文を使うことで、プログラムの実行結果を画面に表示できます。
例1:メッセージを表示する
DISPLAY "COBOLの学習を始めましょう!".
例2:文字列と変数の値を表示する。(変数は別途指定する必要あり)
DISPLAY "現在の残高は " HENSU " 円です".
ファイル操作の基本(OPEN、READ、WRITE、CLOSE)
COBOLではファイルの入出力を効率的に扱う機能が備わっています。
ファイル操作には、主に以下の4つの基本的なコマンドを使用します。
- OPEN(ファイルを開く)
- READ(ファイルからデータを読み取る)
- WRITE(ファイルにデータを書き込む)
- CLOSE(ファイルを閉じる)
ファイルの定義
COBOLでファイルを扱うには、DATA DIVISION
内の FILE SECTION
でファイルの構造を定義します。
例)
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-RECORD.
05 CUSTOMER-ID PIC 9(5).
05 CUSTOMER-NAME PIC X(20).
05 BALANCE PIC 9(7)V99.
この定義では、CUSTOMER-FILE
というファイルが、顧客ID(数値5桁)、顧客名(20文字)、残高(7桁整数+2桁小数)を持つレコードで構成されていることを示しています。
ファイルを開く(OPEN文)
ファイルを操作するには、最初に OPEN
文を使ってファイルを開く必要があります。
OPEN INPUT
:ファイルを読み取り専用で開くOPEN OUTPUT
:ファイルを書き込み専用で開くOPEN EXTEND
:ファイルの末尾にデータを追加する
例:ファイルを開く
OPEN INPUT CUSTOMER-FILE.
ファイルの読み取り(READ文)
ファイルのデータを1行ずつ読み取る場合、READ
文を使用します。
例:ファイルから1レコードを読み取る
READ CUSTOMER-FILE INTO WS-CUSTOMER-RECORD
AT END DISPLAY "ファイルの終端です".
ファイルのデータを WS-CUSTOMER-RECORD
という事前に設定した作業領域に読み込み、ファイルの終端に達した場合には "ファイルの終端です"
と表示します。
ファイルへの書き込み(WRITE文)
WRITE
文を使用すると、新しいデータをファイルに追加できます。
下記例を実行すると、CUSTOMER-RECORD
に格納されたデータがファイルに保存されます。
例:ファイルにデータを書き込む
WRITE CUSTOMER-RECORD.
ファイルを閉じる(CLOSE文)
ファイルの操作が完了したら、必ず CLOSE
文でファイルを閉じる必要があります。
例:ファイルを閉じる
CLOSE CUSTOMER-FILE.
実際のデータ処理の流れ
COBOLのファイル処理は、以下の流れで行われます。
- ファイルを開く(OPEN)
- ファイルからデータを読み取る(READ) または データを書き込む(WRITE)
- 処理を繰り返す(PERFORMを使うことが多い)
- ファイルを閉じる(CLOSE)
これらの基本を押さえれば、COBOLでのデータ処理の流れが理解しやすくなります。
3. COBOLのデータ操作と計算処理の基本
COBOLでは、大量のデータを扱うことが前提となっているため、データの操作や計算処理の仕組みがしっかりと用意されています。
この章では、変数への代入や計算処理、条件分岐、ループ処理、文字列操作など、COBOLの基本的なデータ処理方法について詳しく解説します。
変数の代入と計算処理(MOVE、ADD、SUBTRACT、MULTIPLY、DIVIDE)
変数の代入(MOVE文)
COBOLでは、MOVE
文を使って変数に値を代入します。
例:数値や文字列の代入
MOVE 100 TO WS-NUMBER.
MOVE "COBOL" TO WS-TEXT.
変数 WS-NUMBER
に 100
を、変数 WS-TEXT
に "COBOL"
を代入しています。
基本的な四則演算(ADD、SUBTRACT、MULTIPLY、DIVIDE)
COBOLでは、四則演算を行うための専用の命令が用意されています。
四則演算について、下記1~4で見ていきましょう。
1. 足し算(ADD)
ADD WS-VALUE1 TO WS-VALUE2.
WS-VALUE1
の値を WS-VALUE2
に加算します。
2. 引き算(SUBTRACT)
SUBTRACT WS-VALUE1 FROM WS-VALUE2.
WS-VALUE1
を WS-VALUE2
から減算します。
3. 掛け算(MULTIPLY)
MULTIPLY WS-VALUE1 BY WS-VALUE2.
WS-VALUE1
を WS-VALUE2
に掛け算します。
4. 割り算(DIVIDE)
DIVIDE WS-VALUE1 INTO WS-VALUE2.
WS-VALUE1
で WS-VALUE2
を割ります。
また、演算結果を別の変数に格納することもできます。
例)
ADD WS-VALUE1 TO WS-VALUE2 GIVING WS-RESULT.
この場合、WS-VALUE1 + WS-VALUE2
の計算結果が WS-RESULT
に格納されます。
条件分岐とループ処理の活用(IF、EVALUATE、PERFORM)
条件分岐(IF文)
IF
文を使うと、特定の条件に応じた処理を記述できます。
例:IF文の基本
IF WS-AGE >= 20
DISPLAY "成人です"
ELSE
DISPLAY "未成年です".
変数 WS-AGE
の値が 20 以上であれば "成人です"
と表示し、それ以外の場合は "未成年です"
と表示します。
多岐分岐(EVALUATE文)
複数の条件分岐が必要な場合は、IF分ではなく、EVALUATE
文を使うと可読性が向上します。
例:曜日に応じた処理
EVALUATE WS-DAY
WHEN "MONDAY" DISPLAY "月曜日です"
WHEN "TUESDAY" DISPLAY "火曜日です"
WHEN OTHER DISPLAY "その他の曜日です"
END-EVALUATE.
変数 WS-DAY
の値が、WHEN
の後に指定された値であれば 、DISPLAY
が実行され、対応する曜日を表示します。
ループ処理(PERFORM文)
繰り返し処理を行う場合は、PERFORM
文を使用します。
例1:指定回数の繰り返し
PERFORM 5 TIMES
DISPLAY "繰り返し処理中".
"繰り返し処理中"
を 5 回表示します。
下記のように、条件付きループも可能です。
例2:条件を満たすまで繰り返す
PERFORM UNTIL WS-COUNT > 10
ADD 1 TO WS-COUNT
DISPLAY WS-COUNT.
WS-COUNT
の値が 10
を超えるまで 1
を加算し続け、現在のカウントを表示します。
文字列操作の基本(STRING、UNSTRING、INSPECT)
COBOLには、文字列を扱うための専用の命令が存在しています。
文字列の結合(STRING文)
複数の文字列を結合する場合、STRING
文を使用します。
例:文字列の結合
STRING "Hello, " WS-NAME "!" INTO WS-MESSAGE.
"Hello, "
と WS-NAME
の内容を WS-MESSAGE
に結合します。
文字列の分割(UNSTRING文)
文字列を分割する場合は、UNSTRING
文を使用します。
例:カンマ区切りのデータを分割する
UNSTRING WS-INPUT DELIMITED BY "," INTO WS-FIRST, WS-SECOND.
WS-INPUT
の値をカンマ ,
で分割し、それぞれ WS-FIRST
と WS-SECOND
に格納します。
文字列の検索・置換(INSPECT文)
特定の文字をカウントしたり、置換したりする場合は、INSPECT
文を使います。
例1:文字の出現回数をカウント
INSPECT WS-TEXT TALLYING WS-COUNT FOR ALL "A".
WS-TEXT
内の "A"
の出現回数を WS-COUNT
に格納します。
例2:特定の文字を別の文字に置換
INSPECT WS-TEXT REPLACING ALL "A" BY "B".
WS-TEXT
内の "A"
を "B"
に置換します。
まとめ
本記事では、COBOLの基本構文を徹底解説してきました。
本記事の内容がしっかり理解できていれば、どのシステムのコードも大まかな内容は理解できると思います。
こういった基礎を学びつつ、複雑なコードに関しても、日々勉強し挑戦していきましょう。