【COBOL】OPEN文を使ったプログラミングの10ステップ – Japanシーモア

【COBOL】OPEN文を使ったプログラミングの10ステップ

COBOL初心者のためのOPEN分を使ったプログラミングの徹底解説のイメージCOBOL
この記事は約18分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、COBOLとその基本的な概念であるOPEN文の使い方を、初心者でも理解できるようになります。

COBOLは長い歴史を持つプログラミング言語で、今日でも多くの企業システムで使われています。

この言語の特徴や基本操作を学ぶことで、あなたもプログラミングの世界に一歩踏み出すことができるでしょう。

●COBOLとは

COBOL(Common Business-Oriented Language)は、ビジネス処理に特化したプログラミング言語です。

1959年に開発され、読みやすい英語のような構文が特徴で、主に金融機関や政府機関などで広く使用されています。

COBOLは、大規模なデータ処理やバッチ処理に適しており、安定した運用が可能なため、現在でも多くのシステムで活躍しています。

○COBOLの歴史と特徴

COBOLは、その名の通りビジネス向けに開発された言語で、その設計からビジネス処理の複雑さと大量のデータを扱う能力が重視されてきました。

長年にわたる使用と改良により、堅牢な言語としての地位を築いています。

また、COBOLのコードは英語に近い自然な構造を持っており、プログラミング初心者にとっても学びやすい特徴があります。

○なぜ今もCOBOLが重要なのか

多くの人々が新しい技術や言語に注目する中で、COBOLが今もなお重要視されているのは、その信頼性と安定性にあります。

特に金融機関や政府機関などでは、長年にわたって蓄積されたCOBOLによるシステムが多数存在し、これらのシステムは今日もなお、重要なビジネスプロセスを支えています。

また、新しい技術との組み合わせによって、COBOLは現代のIT環境にも適応しています。

したがって、COBOLを学ぶことは、既存システムの理解と新しい技術への橋渡しという意味でも価値があります。

●OPEN文の基本

COBOLにおけるOPEN文は、ファイル操作の際に欠かせない要素です。

この文を使うことで、プログラムがファイルとの接続を開始し、データの読み書きが可能になります。

OPEN文の正しい使用方法を理解することは、COBOLプログラミングにおいて基本中の基本と言えます。

○OPEN文とは何か

OPEN文は、COBOLプログラムがファイルシステムと通信するための命令です。

この命令により、特定のファイルに対するアクセスが開始され、読み込みや書き込みなどの操作が行えるようになります。

OPEN文は、ファイルの種類やアクセスモードに応じて異なるオプションを指定することができ、これにより柔軟なファイル操作が可能になります。

○OPEN文の構文と機能

COBOLのOPEN文の基本的な構文は、「OPEN [アクセスモード] [ファイル名]」となります。

アクセスモードには、読み取り専用(INPUT)、書き込み専用(OUTPUT)、更新(I-O)、拡張(EXTEND)などがあります。

例えば、読み取り専用でファイルを開く場合は、「OPEN INPUT ファイル名」と記述します。

この命令は、指定されたファイルを開き、プログラムがそのファイルからデータを読み取ることを可能にします。

サンプルコード例として、”顧客データ”という名前のファイルを読み取り専用で開く場合は下記のように記述します。

IDENTIFICATION DIVISION.
PROGRAM-ID. OpenSample.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-DATA.
01 CUSTOMER-RECORD.
   05 CUSTOMER-ID PIC 9(4).
   05 CUSTOMER-NAME PIC A(20).
   05 CUSTOMER-ADDRESS PIC A(30).
PROCEDURE DIVISION.
   OPEN INPUT CUSTOMER-DATA.
   [...データ処理の命令...]
   CLOSE CUSTOMER-DATA.
END PROGRAM OpenSample.

このコードでは、まず”顧客データ”ファイルに関連するファイル記述子(FD)とデータ構造を定義しています。

その後、PROCEDURE DIVISIONでOPEN文を使用してファイルを開き、必要なデータ処理を行った後にCLOSE文でファイルを閉じています。

●OPEN文の使い方

COBOLでのファイル操作を行う上で、OPEN文の使い方を理解することは非常に重要です。

OPEN文を使うことで、ファイルを開いてデータの読み書きを行うことができます。

ここでは、OPEN文を使った基本的なファイルの開き方について説明します。

○サンプルコード1:ファイルを開く基本的なコード

最も基本的なOPEN文の使用例として、ファイルを開くプロセスを紹介します。

下記のサンプルコードでは、”EMPLOYEE-DATA”というファイルを読み取り専用で開いています。

IDENTIFICATION DIVISION.
PROGRAM-ID. BasicOpen.
DATA DIVISION.
FILE SECTION.
FD EMPLOYEE-DATA.
01 EMPLOYEE-RECORD.
   05 EMPLOYEE-ID PIC 9(4).
   05 EMPLOYEE-NAME PIC A(20).
   05 EMPLOYEE-AGE PIC 9(2).
PROCEDURE DIVISION.
   OPEN INPUT EMPLOYEE-DATA.
   [...データ処理の命令...]
   CLOSE EMPLOYEE-DATA.
END PROGRAM BasicOpen.

この例では、EMPLOYEE-DATAというファイルを操作するためのファイル記述子(FD)と、その中のレコード構造を定義しています。

その後、PROCEDURE DIVISIONで「OPEN INPUT EMPLOYEE-DATA」と記述してファイルを読み取り専用で開いています。

ファイル操作が完了したら「CLOSE EMPLOYEE-DATA」でファイルを閉じます。

○サンプルコード2:読み取り専用でファイルを開く

次に、読み取り専用でファイルを開く方法について説明します。

読み取り専用でファイルを開く場合、OPEN文には「INPUT」モードを使用します。

これにより、ファイルからデータを読み取ることができますが、書き込みはできません。

下記のサンプルコードは、”CUSTOMER-DATA”というファイルを読み取り専用で開く例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. ReadOnlyOpen.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-DATA.
01 CUSTOMER-RECORD.
   05 CUSTOMER-ID PIC 9(4).
   05 CUSTOMER-NAME PIC A(20).
   05 CUSTOMER-ADDRESS PIC A(30).
PROCEDURE DIVISION.
   OPEN INPUT CUSTOMER-DATA.
   [...データの読み取り処理...]
   CLOSE CUSTOMER-DATA.
END PROGRAM ReadOnlyOpen.

このコードでは、「OPEN INPUT CUSTOMER-DATA」と記述することで、CUSTOMER-DATAファイルを読み取り専用で開いています。

読み取り処理が終了した後、ファイルを「CLOSE CUSTOMER-DATA」で閉じています。

○サンプルコード3:書き込み専用でファイルを開く

次に、書き込み専用でファイルを開く方法について説明します。

このモードでは、ファイルにデータを書き込むことができますが、読み取りはできません。

書き込み専用でファイルを開くには、OPEN文に「OUTPUT」モードを指定します。

下記のサンプルコードは、”SALES-DATA”というファイルを書き込み専用で開く例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. WriteOnlyOpen.
DATA DIVISION.
FILE SECTION.
FD SALES-DATA.
01 SALES-RECORD.
   05 PRODUCT-ID PIC 9(4).
   05 SALE-AMOUNT PIC 9(5).
PROCEDURE DIVISION.
   OPEN OUTPUT SALES-DATA.
   [...データの書き込み処理...]
   CLOSE SALES-DATA.
END PROGRAM WriteOnlyOpen.

このコードでは、「OPEN OUTPUT SALES-DATA」と記述することで、SALES-DATAファイルを書き込み専用で開いています。

データの書き込みが終了した後、ファイルは「CLOSE SALES-DATA」で閉じられます。

○サンプルコード4:ファイルの状態を確認する

COBOLでは、ファイルが正常に開かれたか、または特定のエラーが発生したかを確認することが重要です。

これは、ファイルのオープン後に状態をチェックすることで行われます。

下記のサンプルコードは、ファイルを開いた後にその状態を確認する方法を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. FileStatusCheck.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-DATA.
01 CUSTOMER-RECORD.
   05 CUSTOMER-ID PIC 9(4).
   05 CUSTOMER-NAME PIC A(20).
PROCEDURE DIVISION.
   OPEN INPUT CUSTOMER-DATA.
   IF NOT AVAILABLE CUSTOMER-DATA
      DISPLAY 'ファイルが開けませんでした。'
      STOP RUN.
   END-IF.
   [...データ処理の命令...]
   CLOSE CUSTOMER-DATA.
END PROGRAM FileStatusCheck.

このコードでは、「OPEN INPUT CUSTOMER-DATA」でファイルを開いた後、「IF NOT AVAILABLE CUSTOMER-DATA」という条件文を使ってファイルが正常に開かれたかどうかをチェックしています。

ファイルが開けなかった場合は、エラーメッセージを表示してプログラムを終了します。

●OPEN文の応用例

COBOLでのOPEN文は、基本的なファイル操作を超えた応用例でも重要な役割を果たします。

ここでは、より複雑なシナリオでのOPEN文の使用例をいくつか紹介します。

○サンプルコード5:複数のファイルを同時に扱う

COBOLでは、一度に複数のファイルを開いて操作することも可能です。

これは、複数のファイル記述子(FD)を定義し、それぞれに対してOPEN文を用いることで実現できます。

例えば、顧客データと注文データの2つのファイルを同時に扱う場合のサンプルコードは下記のようになります。

IDENTIFICATION DIVISION.
PROGRAM-ID. MultiFileHandling.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-DATA.
01 CUSTOMER-RECORD.
   05 CUSTOMER-ID PIC 9(4).
   05 CUSTOMER-NAME PIC A(20).
FD ORDER-DATA.
01 ORDER-RECORD.
   05 ORDER-ID PIC 9(4).
   05 ORDER-AMOUNT PIC 9(5).
PROCEDURE DIVISION.
   OPEN INPUT CUSTOMER-DATA
        INPUT ORDER-DATA.
   [...データ処理の命令...]
   CLOSE CUSTOMER-DATA
         ORDER-DATA.
END PROGRAM MultiFileHandling.

このコードでは、CUSTOMER-DATAとORDER-DATAという2つのファイルを開いています。

これにより、2つのファイルからデータを読み取り、関連する処理を行うことが可能になります。

○サンプルコード6:例外処理を含むファイル操作

ファイル操作中にエラーが発生した場合、適切に例外処理を行うことが重要です。

COBOLでは、ファイル操作の成否に応じて異なる処理を行うことができます。

下記のサンプルコードでは、ファイルの開き方に問題があった場合の例外処理を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. FileErrorHandling.
DATA DIVISION.
FILE SECTION.
FD INVENTORY-DATA.
01 INVENTORY-RECORD.
   05 PRODUCT-ID PIC 9(4).
   05 STOCK-AMOUNT PIC 9(5).
PROCEDURE DIVISION.
   OPEN INPUT INVENTORY-DATA.
   IF NOT AVAILABLE INVENTORY-DATA
      DISPLAY 'ファイルを開けません。エラー処理を行います。'
      PERFORM ERROR-PROCESSING
   END-IF.
   [...通常のデータ処理...]
   CLOSE INVENTORY-DATA.
   EXIT PROGRAM.

ERROR-PROCESSING.
   DISPLAY 'エラーログを記録します。'
   [...エラーログの記録やその他の処理...]
   EXIT PROGRAM.
END PROGRAM FileErrorHandling.

このコードでは、INVENTORY-DATAファイルが正常に開かなかった場合にエラーメッセージを表示し、ERROR-PROCESSINGセクションでエラー処理を行っています。

○サンプルコード7:効率的なファイル処理のテクニック

効率的なファイル処理を行うためには、ファイルを適切に開閉し、データの読み書きを最適化する必要があります。

例えば、大量のデータを扱う場合、一度に全てのデータを読み込むのではなく、必要な部分だけを順次処理する方法が有効です。

下記のサンプルコードは、大量のデータを扱う際の効率的な読み込み方法を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. EfficientFileProcessing.
DATA DIVISION.
FILE SECTION.
FD TRANSACTION-DATA.
01 TRANSACTION-RECORD.
   05 TRANSACTION-ID PIC 9(4).
   05 TRANSACTION-AMOUNT PIC 9(5).
PROCEDURE DIVISION.
   OPEN INPUT TRANSACTION-DATA.
   PERFORM UNTIL END-OF-FILE TRANSACTION-DATA
      READ TRANSACTION-DATA
         AT END
            DISPLAY '全てのデータを読み込みました。'
         NOT AT END
            PERFORM PROCESS-TRANSACTION
      END-READ
   END-PERFORM.
   CLOSE TRANSACTION-DATA.
   EXIT PROGRAM.

PROCESS-TRANSACTION.
   DISPLAY '取引データを処理します: ' TRANSACTION-ID.
   [...取引データの処理...]
   EXIT PROGRAM.
END PROGRAM EfficientFileProcessing.

このコードでは、TRANSACTION-DATAファイルを開いた後、ファイルの終わりまでデータを順次読み込み、各取引に対して処理を行っています。

これにより、大量のデータを効率的に扱うことができます。

●注意点と対処法

COBOLプログラミングにおけるファイル操作では、さまざまな注意点と対処法を理解しておく必要があります。

特に、ファイル処理に関連するエラーは、プログラムの正確性と効率性に大きく影響を与えます。

○ファイル操作時の一般的なエラーとその解決策

ファイル操作中によく遭遇するエラーには、ファイルが見つからない、アクセス権限がない、ファイルが既に開かれている、といったものがあります。

これらのエラーに対処するためには、事前にファイルの存在を確認する、適切なアクセス権限を確保する、ファイルが使用中でないことを確認するなどの措置が必要です。

例えば、ファイルが存在しない場合のエラー処理を行うサンプルコードは下記のようになります。

IDENTIFICATION DIVISION.
PROGRAM-ID. FileNotFoundHandling.
DATA DIVISION.
FILE SECTION.
FD REPORT-DATA.
01 REPORT-RECORD.
   05 REPORT-DETAILS PIC A(100).
PROCEDURE DIVISION.
   OPEN INPUT REPORT-DATA.
   IF NOT AVAILABLE REPORT-DATA
      DISPLAY 'ファイルが存在しません。'
      STOP RUN.
   END-IF.
   [...データ処理の命令...]
   CLOSE REPORT-DATA.
END PROGRAM FileNotFoundHandling.

このコードでは、REPORT-DATAファイルが存在しない場合にエラーメッセージを表示し、プログラムを終了しています。

○パフォーマンスを最適化するコツ

ファイル操作のパフォーマンスを最適化するには、不要なファイルの開閉を避ける、必要なデータのみを処理する、バッファサイズを適切に設定するなどのテクニックが有効です。

特に大量のデータを扱う場合には、これらのテクニックが処理速度の向上に寄与します。

例えば、バッファサイズを適切に設定してファイル読み取りを効率化するサンプルコードは下記のようになります。

IDENTIFICATION DIVISION.
PROGRAM-ID. BufferOptimization.
DATA DIVISION.
FILE SECTION.
FD LARGE-DATA.
01 LARGE-RECORD.
   05 DATA-CONTENT PIC A(100).
PROCEDURE DIVISION.
   OPEN INPUT LARGE-DATA.
   [...バッファサイズの最適化処理...]
   PERFORM UNTIL END-OF-FILE LARGE-DATA
      READ LARGE-DATA
      [...データ処理の命令...]
   END-PERFORM.
   CLOSE LARGE-DATA.
END PROGRAM BufferOptimization.

このコードでは、LARGE-DATAファイルの読み取りに際してバッファサイズの最適化を行っています。

●COBOLプログラミングのカスタマイズ

COBOLプログラミングは、その柔軟性から多様なカスタマイズが可能です。

特にファイル操作に関しては、カスタム関数の使用やユーザー入力を組み込んだ動的な処理が、効率的かつ効果的なプログラミングを実現します。

○カスタム関数を使ったファイル操作

COBOLでは、独自の関数を定義してファイル操作をカスタマイズすることができます。

これにより、特定の処理を再利用可能な形でコードに組み込むことが可能になります。

例えば、特定のファイルからデータを読み込むカスタム関数を作成するサンプルコードは下記の通りです。

IDENTIFICATION DIVISION.
PROGRAM-ID. CustomFunctionFileOperation.
DATA DIVISION.
FILE SECTION.
FD DATA-FILE.
01 DATA-RECORD.
   05 DATA-FIELD PIC A(20).
PROCEDURE DIVISION.
   PERFORM READ-FROM-FILE UNTIL END-OF-FILE
   CLOSE DATA-FILE.
   STOP RUN.

READ-FROM-FILE.
   OPEN INPUT DATA-FILE.
   READ DATA-FILE
      AT END
         DISPLAY 'ファイルの終わりに到達しました。'
      NOT AT END
         DISPLAY '読み込んだデータ: ' DATA-FIELD
   END-READ.
END PROGRAM CustomFunctionFileOperation.

このコードでは、READ-FROM-FILEというカスタム関数を使用して、DATA-FILEからデータを読み込んでいます。

関数内でファイルのオープン、読み取り、表示を行い、ファイルの終わりに達したらメッセージを表示しています。

○ユーザー入力を組み込んだ動的なファイル操作

ユーザーの入力に基づいて動的にファイルを操作することも、COBOLで実現可能です。

これにより、実行時に異なるファイルを選択したり、異なる処理を行ったりすることができます。

ユーザーの入力に基づいてファイルを操作するサンプルコードは下記のようになります。

IDENTIFICATION DIVISION.
PROGRAM-ID. DynamicFileOperation.
DATA DIVISION.
FILE SECTION.
FD USER-FILE.
01 USER-RECORD.
   05 USER-FIELD PIC A(20).
WORKING-STORAGE SECTION.
01 FILE-NAME PIC A(20).
PROCEDURE DIVISION.
   DISPLAY 'ファイル名を入力してください: '
   ACCEPT FILE-NAME
   OPEN INPUT USER-FILE(FILE-NAME)
   READ USER-FILE
      AT END
         DISPLAY 'ファイルが見つかりません。'
      NOT AT END
         DISPLAY '読み込んだデータ: ' USER-FIELD
   CLOSE USER-FILE.
END PROGRAM DynamicFileOperation.

このコードでは、ユーザーにファイル名の入力を求め、そのファイルを開いてデータを読み取っています。

ユーザーが指定したファイルに応じて動的に処理が変わるため、より柔軟なプログラミングが可能です。

まとめ

本記事では、COBOLの基本的な概念であるOPEN文の使い方に焦点を当て、初心者にも理解しやすいように、その基本から応用例、さらには注意点やカスタマイズ方法まで詳細に解説しました。

この知識を活用することで、COBOLにおけるファイル操作の理解を深め、実践的なプログラミングスキルを磨くことが可能です。

この記事が、COBOLプログラミング、特にOPEN文を用いたファイル操作の理解に役立つことを願っています。

これらの知識を活用し、効率的かつ効果的なCOBOLプログラムを作成しましょう。