お問い合わせ

ホーム > COBOLのはなし > COBOLが得意なファイル処理

COBOLが得意なファイル処理

飯島 裕一 (NEC 第二システムソフトウェア事業部)

COBOLは、もともと大量データを扱うファイル処理向けに作られていた言語と言われています。
では、どこがファイル処理向けに工夫されている点なのでしょうか。
今回は、その辺りを少し見てみましょう。

COBOLは、COmmon Business Oriented Lanugageの略であり、その名のとおり事務処理用に設計されたプログラミング言語です。
事務処理で扱うファイルとしては、例えば、伝票を処理するだけのシステムでも、次のようなファイルが頭に浮かびます。

受注した伝票データが入っている「受注伝票ファイル」の1件1件のレコードに対して、「在庫マスタファイル」を検索したり、レコードの編集・結合・振り分け・突き合せ・集計をしたり、あるいは「帳票ファイル」を印刷したりするなど、一連の手続き処理を、設計・プログラミングすることが、事務処理系システムのSE・プログラマーの重要な仕事となります。

つまり、ファイルに対する一連の処理手続きを作成することがプログラミングといっても過言ではありません(すこし乱暴ですが)。

実は、COBOLは、プログラムの中で、ファイルの定義や入出力処理を、ごく自然に記述できるようになっています。このため、ファイルの入出力に関しては、簡単な記述でファイル入出力ができてしまいます。

そこのところを、具体的に、COBOLとCとで比較しながら説明します。

例えば「受注伝票ファイルからデータを読み込み、バックアップファイルへ書き出す」という処理は、COBOLとCでは次のようになります(データ定義部分や異常系処理は省いています)。

<COBOL言語>
    READ 受注伝票ファイル
        AT END
            (終了処理)
    MOVE 受注伝票レコード TO バックアップレコード.
    WRITE バックアップレコード.
<C言語>
    /* 受注伝票レコードからの読込み */
    recsize = fread(juchu_r,1,juchu_rec_size,juchu_p);
    if (recsize==0) {  /* 終了処理 */ 〜 }
    /* 受注伝票レコードをバックアップレコードに転記する */
    memcpy(juchu_r,back_r,recsize);
    /* バックアップファイルにレコードを書き出す */
    f=write(back_r,1,recsize,back_p);

上記の例でわかるように、Cでは、標準の入出力関数fread()/fwrite()の引数に、a) データの格納バッファへのポインタ、b) 入出力するデータの大きさ、c) 受注伝票ファイルやバックアップファイルを指すファイルポインタを指定して、ファイルの入出力を行います。

これに対し、COBOLでは、ファイル名やレコード名をREAD文やWRITE文に指定するだけで入出力が可能です。比較してみると分かるように、Cではコメントを読まないと何のファイルに対する処理かを確認できないのに対し、COBOLではREADやWRITEの直後に書かれたファイル名やレコード名を見れば、どのファイルに対する処理かがわかります。

COBOLは、データ入出力サイズなどはその都度指定することなく入出力が可能です。単純ゆえに、非常にプログラムの解読性は高いのです。(ファイル名やレコード名が日本語で定義できるのも可読性を高くしている一因です)。

このような点が、COBOLがファイル処理向けの言語といわれる所以です。