COBOL言語で入力ファイルを読み込むには「READ文」で! | 用語辞典
COBOL(コボル)言語の予約語READを使った命令文の書き方とは
COBOL(コボル)言語のREAD文とは?
COBOL(コボル)におけるREAD文は、入力ファイルを読み込むときに使用する命令文です。ファイルを読み込むときは他のプログラミング言語同様に、事前に読み込むファイルを指定したり、読み込むファイルをオープンしておく必要があります。
本記事では、READ文の基本的な使い方やルール、注意点などをご紹介します。
書き方1-1:(入出力に関するセクションを指定する)
ファイルを読み込む準備作業として、事前にファイルの情報を設定しておく必要があります。
「ENVIRONMENT DIVISION」に以下を記述します。
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT [ファイル変数] ASSIGN TO ['ファイル名']
ORGANIZATION IS LINE SEQUENTIAL.
STATUS [ファイル管理用変数].
まず、「INPUT-OUTPUT SECTION」でファイル入出力のセクションを指定し、ファイルの情報を設定するために「FILE-CONTROL」を記述します。
次にSELECT文で、ファイルの読み込み時に指定するファイル変数を定義して、ASSIGN TOの後にファイル名を指定します。
「ORGANIZATION IS LINE SEQUENTIAL.」は、改行区切りで読み込む場合に指定します。
最後にファイルのステータスを管理するファイル管理用の変数を定義します。
書き方1-2:(ファイルに関するセクションを指定する)
実際に読み込むファイルと、読み込み時に使用するレコードを設定します。
「DATA DIVISION」に以下を記述します。
FILE SECTION.
FD [ファイル変数].
[ファイルレコード変数].
読み込むファイルを指定するために「FILE SECTION」を記述し、FD(ファイルディスクリプション)にSELECT文で指定したファイル変数を指定します。
次に読み込むファイルレコード用の変数を定義しておきます。
書き方1-3:(読み込み処理)
「MAIN SECTION」で実際にファイルを読み込む処理を記述します。
OPEN INPUT [ファイル変数].
READ [ファイル変数]
AT END
読み込み終了時の処理
NOT AT END
読み込み実行時の処理
END-READ.
CLOSE [ファイル変数].
まず「OPEN INPUT」でファイル変数を指定して、ファイルをオープンします。
次にREAD文でファイル名の変数を指定し、AT ENDはファイル読み込み終了時の処理を、NOT AT ENDは読み込み実行時の処理を記述します。
ファイルの読み込みが完了したら、必ずCLOSE文でファイルを指定して、ファイルを閉じます。
書き方1-1~1-3を踏まえて、実際にファイルに読み込む処理の簡単なサンプルを、以下に紹介します。
読み込み用のファイルは事前に用意しておきます。
test.txt-------------------
ABCD
EFGH
IJKL
----------------------------
使用例:
実行結果:
紹介したサンプルでは、読み込み用ファイルtest.txtを指定し、PERFORM文を使用してファイル読み込み時のステータスが"00"(正常)な限り、ループしてREAD文で読み込んでいます。
AT ENDで読み込み終了時に"READ END"を出力し、NOT AT ENDで改行ごとに読み込んだ内容を出力しています。
READ文のCOBOL(コボル)言語における基本事項やルールについて
- READ文で読み込むレコードはデータ部で定義しておく必要があります。
- READ、ファイル名、AT END、NOT AT ENDの各要素間の空白、改行の有無は自由です。
- AT ENDと読み込み終了処理、NOT AT ENDと読み込み実行時の処理は必要に応じて記述し、片方または両方を省略しても問題ありません。
COBOL(コボル)言語のREAD文を扱う上での注意点
COBOLにおけるファイル入出力は、前述したようにREAD文で読み込む前に、さまざまな準備が必要です。
また、他のCやJavaなどのプログラミング言語と異なる点として、ファイルを1行ずつ読み込むと、いずれは読み込むレコードがなくなりますが、COBOLにはファイル読み込み時の状態を返すステータスや関数は存在しません。
そのため、ファイルの読み込み有無は、プログラム側で管理する必要があります。
例えば、READ文で取得したレコードをデータ項目に転記する場合、取得したレコードが空の場合でも、プログラムでファイル読み込み有無が判断できなかったら、そのまま処理が実行されてしまいます。
以下にREAD文でファイルを読み込んで、読み込んだ最後のレコードをデータ項目に転記する処理を紹介します。
サンプルではファイル読み込み後に、読み込んだ最後のレコードをデータ項目に転記していますが、もしファイルが存在しなかった場合、空白が転記されてしまいます。
そのため、事前にファイル入出力の結果を判定して、結果に応じた処理を記述する必要があります。
READ文を使ったCOBOL(コボル)プログラムの活用法
ファイルを読み込むときに必須のREAD文ですが、前述したようにファイルをただ読み込んで処理をするのではなく、ファイル入出力の結果に応じた処理をする必要があります。
以下にREAD文の活用法として、IF文でファイルの読み込みに成功したときと、失敗したときで動作が異なる処理を簡単なサンプルで紹介します。
- *> READ_SAMPLE03
- IDENTIFICATION DIVISION.
- PROGRAM-ID. READ_SAMPLE03.
- ENVIRONMENT DIVISION.
- *>入出力に関するセクション
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- *>SELECT文でファイル定数とASSIGN TOでファイル名を設定する
- SELECT TEST-FILE ASSIGN TO 'test.txt'
- *>改行区切りで読み込む場合は以下を設定する
- ORGANIZATION IS LINE SEQUENTIAL
- *>ステータスを管理する変数を定義する
- STATUS IN-FILE-STATUS.
- DATA DIVISION.
- FILE SECTION.
- *>FDで読み込むファイルを指定する
- FD TEST-FILE.
- 01 IN-FILE-REC PIC X(20).
- WORKING-STORAGE SECTION.
- *>ステータスの領域を設定する
- 01 IN-FILE-STATUS PIC XX.
- PROCEDURE DIVISION.
- MAIN SECTION.
- *>ファイルをINPUT用にオープンする
- OPEN INPUT TEST-FILE.
- *>ファイルの読み込み有無確認
- IF IN-FILE-STATUS NOT = "00" THEN
- *>読み込み失敗
- DISPLAY "File not found"
- ELSE
- *>ステータスが"00"な限りループする
- PERFORM UNTIL IN-FILE-STATUS NOT = "00"
- *>ファイルを読み込む
- READ TEST-FILE
- *>読み込み終了時
- AT END
- DISPLAY "READ END"
- *>読み込み実行時
- NOT AT END
- DISPLAY IN-FILE-REC
- END-READ
- END-PERFORM
- END-IF.
- *>ファイルをクローズする
- CLOSE TEST-FILE.
- STOP RUN.
紹介したサンプルでは、IF文でファイル読み込み有無の判定を行い、ファイルステータス変数の値が"00"以外の場合はファイル読み込み失敗とみなし、メッセージを出力して処理を終了しています。
ファイルステータス変数の値が"00"の場合はELSEの処理に入り、通常のファイル読み込み処理を実行しています。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典