第3章: COBOLの実務向け応用

COBOLが実務でよく使われる具体的な応用方法について解説します。ファイル処理やバッチ処理、デバッグとエラー処理といった現場でよく直面する作業に特化し、実務での即戦力となるスキルを身につけるための例とコードを紹介します。


ファイル処理

ファイル操作は、COBOLの中核的な機能のひとつです。多くの企業システムでデータの入出力にファイルが用いられるため、ファイル操作はCOBOLプログラマにとって必須の技術となります。ここでは、順ファイルとランダムファイルの作成と読み込みについて解説します。


順ファイルの作成

順ファイル(Sequential File)は、データが連続して格納されているファイルです。このファイル形式は最も基本的なもので、データは順次アクセスされます。順ファイルの作成例として、顧客情報を格納するファイルを生成するプログラムを書いてみましょう。

プログラム例: 順ファイルの作成
IDENTIFICATION DIVISION.
PROGRAM-ID. SEQUENTIAL-FILE-WRITE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE ASSIGN TO "customer.dat"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-FILE-STATUS.

DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-RECORD.
05 CUSTOMER-ID PIC 9(5).
05 CUSTOMER-NAME PIC X(20).
05 CUSTOMER-ADDRESS PIC X(30).

WORKING-STORAGE SECTION.
01 WS-FILE-STATUS PIC XX.

PROCEDURE DIVISION.
BEGIN.
OPEN OUTPUT CUSTOMER-FILE
IF WS-FILE-STATUS NOT = "00"
DISPLAY "ERROR OPENING FILE" END-DISPLAY
STOP RUN.

MOVE 12345 TO CUSTOMER-ID
MOVE "John Doe" TO CUSTOMER-NAME
MOVE "123 Elm Street" TO CUSTOMER-ADDRESS
WRITE CUSTOMER-RECORD
IF WS-FILE-STATUS NOT = "00"
DISPLAY "ERROR WRITING TO FILE" END-DISPLAY
STOP RUN.

MOVE 23456 TO CUSTOMER-ID
MOVE "Jane Smith" TO CUSTOMER-NAME
MOVE "456 Oak Avenue" TO CUSTOMER-ADDRESS
WRITE CUSTOMER-RECORD
IF WS-FILE-STATUS NOT = "00"
DISPLAY "ERROR WRITING TO FILE" END-DISPLAY
STOP RUN.

CLOSE CUSTOMER-FILE
DISPLAY "FILE CREATED SUCCESSFULLY" END-DISPLAY.
STOP RUN.

このプログラムでは、customer.dat という名前のファイルを作成し、2つの顧客情報レコードを書き込んでいます。OPEN OUTPUTでファイルを開き、WRITE文でデータを書き込み、完了後にCLOSE文でファイルを閉じます。WS-FILE-STATUSを使ってファイル操作の成功/失敗を確認し、エラーハンドリングを行っています。


順ファイルの読み込み

次に、作成した順ファイルを読み込むプログラムを示します。これは、顧客データを順番に読み込んで画面に表示する基本的なプログラムです。

プログラム例: 順ファイルの読み込み
IDENTIFICATION DIVISION.
PROGRAM-ID. SEQUENTIAL-FILE-READ.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE ASSIGN TO "customer.dat"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-FILE-STATUS.

DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-RECORD.
05 CUSTOMER-ID PIC 9(5).
05 CUSTOMER-NAME PIC X(20).
05 CUSTOMER-ADDRESS PIC X(30).

WORKING-STORAGE SECTION.
01 WS-FILE-STATUS PIC XX.

PROCEDURE DIVISION.
BEGIN.
OPEN INPUT CUSTOMER-FILE
IF WS-FILE-STATUS NOT = "00"
DISPLAY "ERROR OPENING FILE" END-DISPLAY
STOP RUN.

PERFORM UNTIL WS-FILE-STATUS = "10"
READ CUSTOMER-FILE INTO CUSTOMER-RECORD
AT END
MOVE "10" TO WS-FILE-STATUS
NOT AT END
DISPLAY "ID: " CUSTOMER-ID " NAME: " CUSTOMER-NAME " ADDRESS: " CUSTOMER-ADDRESS END-DISPLAY
END-PERFORM.

CLOSE CUSTOMER-FILE
DISPLAY "FILE READ COMPLETED" END-DISPLAY.
STOP RUN.

このプログラムでは、OPEN INPUTでファイルを開き、READ文でファイルの内容を順に読み込みます。AT END句を使って、ファイルの終端に達したかどうかを確認します。WS-FILE-STATUS"10"がセットされると、ループが終了し、ファイルを閉じてプログラムを終了します。


ランダムファイルの作成と読み込み

ランダムファイル(Relative File)は、レコードがファイル内の特定の位置に格納され、直接アクセスが可能です。以下に、ランダムファイルの作成と読み込みの基本的な例を示します。

プログラム例: ランダムファイルの作成
IDENTIFICATION DIVISION.
PROGRAM-ID. RANDOM-FILE-WRITE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE ASSIGN TO "customer-random.dat"
ORGANIZATION IS RELATIVE
ACCESS MODE IS RANDOM
RELATIVE KEY IS CUSTOMER-ID
FILE STATUS IS WS-FILE-STATUS.

DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-RECORD.
05 CUSTOMER-ID PIC 9(5).
05 CUSTOMER-NAME PIC X(20).
05 CUSTOMER-ADDRESS PIC X(30).

WORKING-STORAGE SECTION.
01 WS-FILE-STATUS PIC XX.

PROCEDURE DIVISION.
BEGIN.
OPEN OUTPUT CUSTOMER-FILE
IF WS-FILE-STATUS NOT = "00"
DISPLAY "ERROR OPENING FILE" END-DISPLAY
STOP RUN.

MOVE 12345 TO CUSTOMER-ID
MOVE "Alice Johnson" TO CUSTOMER-NAME
MOVE "789 Pine Road" TO CUSTOMER-ADDRESS
WRITE CUSTOMER-RECORD INVALID KEY
DISPLAY "ERROR WRITING RECORD" END-DISPLAY
STOP RUN.

MOVE 23456 TO CUSTOMER-ID
MOVE "Bob Lee" TO CUSTOMER-NAME
MOVE "321 Maple Street" TO CUSTOMER-ADDRESS
WRITE CUSTOMER-RECORD INVALID KEY
DISPLAY "ERROR WRITING RECORD" END-DISPLAY
STOP RUN.

CLOSE CUSTOMER-FILE
DISPLAY "RANDOM FILE CREATED SUCCESSFULLY" END-DISPLAY.
STOP RUN.

このプログラムは、RELATIVE組織を使用して、指定したキー(CUSTOMER-ID)でランダムファイルを作成します。


バッチ処理

バッチ処理は、大量のデータや一連のタスクを自動的に処理するために使われます。COBOLでは、バッチ処理のプログラムを作成してスケジューリングシステムと連携させることが一般的です。

バッチ処理は、多くの場合夜間などに自動的に実行され、特定の時間にスタートするようスケジューリングされます。COBOLプログラム内ではバッチ処理に特化した構文はありませんが、必要な処理をまとめて実行するように設計します。

プログラム例: バッチ処理の例
IDENTIFICATION DIVISION.
PROGRAM-ID. BATCH-PROCESS.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TOTAL-AMOUNT PIC 9(10)V99 VALUE 0.
01 WS-CUSTOMER-ID PIC 9(5).
01 WS-CUSTOMER-BALANCE PIC 9(10)V99.

PROCEDURE DIVISION.
BEGIN.
PERFORM PROCESS-CUSTOMER UNTIL WS-CUSTOMER-ID = 99999

DISPLAY "BATCH PROCESS COMPLETED" END-DISPLAY.
STOP RUN.

PROCESS-CUSTOMER.
MOVE 12345 TO WS-CUSTOMER-ID
MOVE 1000.00 TO WS-CUSTOMER-BALANCE
ADD WS-CUSTOMER-BALANCE TO WS-TOTAL-AMOUNT

DISPLAY "CUSTOMER ID: " WS-CUSTOMER-ID " BALANCE: " WS-CUSTOMER-BALANCE END-DISPLAY.

デバッグとエラー処理

エラー処理は、プログラムの堅牢性を保つために非常に重要です。COBOLではFILE STATUSINVALID KEYなどを使って、エラーが発生した際の対処を行います。

エラーハンドリングを導入することで、予期しない状況が発生してもプログラムがクラッシュするのを防ぎ、必要に応じてメッセージを出力します。

COBOLプログラムのエラー処理には、ファイル操作の結果や計算処理のエラーをチェックするメカニズムがいくつかあります。実務ではエラー処理がないと、データの破損や計算の誤りが発生し、予期せぬ結果をもたらす可能性があります。エラー処理は、特にファイル操作で重要です。ファイルが存在しない、アクセス権がない、データが見つからないなどのエラーに対処する必要があるためです。


ファイル操作のエラーハンドリング

COBOLのファイル処理では、FILE STATUS変数を使って操作が成功したかどうかを確認できます。例えば、ファイルを開く際、読み書きする際、終了時にはFILE STATUSを確認してエラーを検出し、適切なメッセージを表示することが推奨されます。

プログラム例: FILE STATUSを使ったエラー処理
IDENTIFICATION DIVISION.
PROGRAM-ID. ERROR-HANDLING-EXAMPLE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ERROR-FILE ASSIGN TO "errorfile.dat"
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS WS-FILE-STATUS.

DATA DIVISION.
FILE SECTION.
FD ERROR-FILE.
01 ERROR-RECORD.
05 ERROR-ID PIC 9(5).
05 ERROR-MESSAGE PIC X(50).

WORKING-STORAGE SECTION.
01 WS-FILE-STATUS PIC XX.
01 WS-ERROR-CODE PIC 9(3).

PROCEDURE DIVISION.
BEGIN.
OPEN INPUT ERROR-FILE
IF WS-FILE-STATUS NOT = "00"
MOVE WS-FILE-STATUS TO WS-ERROR-CODE
DISPLAY "FILE OPEN ERROR CODE: " WS-ERROR-CODE
STOP RUN.

READ ERROR-FILE INTO ERROR-RECORD
AT END
DISPLAY "NO DATA FOUND" END-DISPLAY
NOT AT END
DISPLAY "RECORD READ SUCCESSFULLY" END-DISPLAY.

CLOSE ERROR-FILE
IF WS-FILE-STATUS NOT = "00"
DISPLAY "FILE CLOSE ERROR" END-DISPLAY.
STOP RUN.

このプログラムでは、ファイル操作に失敗した場合にWS-FILE-STATUSが「00」以外の値を取り、エラーメッセージが表示されます。このようなエラーハンドリングを追加することで、ユーザーはエラーの発生を迅速に把握し、エラーコードを参照して問題を解決できます。


デバッグの手法

デバッグはプログラムの問題を発見し、修正するための重要な工程です。COBOLのデバッグは主にDISPLAY文を活用します。DISPLAY文を使って変数の内容を出力することで、各処理の途中で変数の値を確認し、問題を特定します。

プログラム例: DISPLAYを使ったデバッグ

以下のプログラム例では、変数の内容を確認しながらデバッグを行う手法を示しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. DEBUGGING-EXAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TOTAL PIC 9(5) VALUE 0.
01 WS-NUM1 PIC 9(3) VALUE 10.
01 WS-NUM2 PIC 9(3) VALUE 20.

PROCEDURE DIVISION.
BEGIN.
DISPLAY "WS-NUM1: " WS-NUM1 END-DISPLAY
DISPLAY "WS-NUM2: " WS-NUM2 END-DISPLAY

ADD WS-NUM1 TO WS-TOTAL
DISPLAY "AFTER ADDING WS-NUM1, WS-TOTAL: " WS-TOTAL END-DISPLAY

ADD WS-NUM2 TO WS-TOTAL
DISPLAY "AFTER ADDING WS-NUM2, WS-TOTAL: " WS-TOTAL END-DISPLAY

DISPLAY "FINAL TOTAL: " WS-TOTAL END-DISPLAY.
STOP RUN.

このプログラムでは、計算途中での変数の値をDISPLAY文で出力し、計算が正しく行われているかを確認します。これにより、各ステップでの変数の内容を把握しやすくなり、問題のある部分をすばやく見つけることが可能です。


よくあるエラーとその対処法

以下に、COBOLでよく発生するエラーとその対処法について紹介します。

  1. ファイルが開かれていない状態での読み取り/書き込みエラー
    • ファイルが開かれていない場合にREADWRITEを行うとエラーが発生します。ファイルを操作する前に必ずOPENしていることを確認してください。
  2. ファイルの終端を超えたアクセスエラー
    • READ操作でファイルの終端に達した場合、END-OF-FILE状態になります。このとき、AT END句を使用して処理を終了させることが重要です。
  3. 無効なレコードキーによるランダムファイルエラー
    • ランダムファイルで存在しないキーでレコードをアクセスしようとするとエラーが発生します。INVALID KEY句を使用して、無効なキーアクセスが行われた場合の処理を追加しましょう。
  4. データ型の不一致によるエラー
    • COBOLでは変数のデータ型が厳密に管理されています。データ型が一致していない変数への値の移動や計算を行うとエラーが発生することがあります。変数のデータ型を揃えることで、エラーを回避できます。

このように、エラーハンドリングとデバッグの手法を学ぶことで、COBOLプログラムの堅牢性とメンテナンス性が向上し、エラーの発生頻度を減らすことができます。ファイル操作やバッチ処理のエラーハンドリングを徹底することで、実務でのデータ処理の信頼性が確保され、業務を円滑に進めることができます。


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

Related Post

第1章: COBOLの導入第1章: COBOLの導入

COBOLは、プログラミング言語の中でも非常に古い歴史を持ちながら、現代でも重要な役割を果たしています。本章ではCOBOLの歴史を学び、企業システムでCOBOLが現在も使われ続けている理由を理解します。次に、COBOLの […]

第2章: COBOLの基本構文第2章: COBOLの基本構文

COBOLは、他のプログラミング言語とは異なる特有の構文とスタイルを持ちますが、その明確で直感的な構造により、多くのエンタープライズアプリケーションで広く利用されています。この章では、COBOLの変数とデータタイプ、基本 […]