COBOLの基本構文を徹底解説!初心者向け入門ガイド!

金融機関や官公庁のシステムで現在も使用され続けている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つの基本的なコマンドを使用します。

  1. OPEN(ファイルを開く)
  2. READ(ファイルからデータを読み取る)
  3. WRITE(ファイルにデータを書き込む)
  4. 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のファイル処理は、以下の流れで行われます。

  1. ファイルを開く(OPEN)
  2. ファイルからデータを読み取る(READ) または データを書き込む(WRITE)
  3. 処理を繰り返す(PERFORMを使うことが多い)
  4. ファイルを閉じる(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-NUMBER100 を、変数 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-VALUE1WS-VALUE2 から減算します。

3. 掛け算(MULTIPLY)

MULTIPLY WS-VALUE1 BY WS-VALUE2.

WS-VALUE1WS-VALUE2 に掛け算します。

4. 割り算(DIVIDE)

DIVIDE WS-VALUE1 INTO WS-VALUE2.

WS-VALUE1WS-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-FIRSTWS-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の基本構文を徹底解説してきました。

本記事の内容がしっかり理解できていれば、どのシステムのコードも大まかな内容は理解できると思います。

こういった基礎を学びつつ、複雑なコードに関しても、日々勉強し挑戦していきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
目次