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ダントツ一番企業。
創業当初の話や理念が閲覧できます。
応募条件
※2020年5月31日を以って、締切りました。
18歳~28歳の方。
正社員採用において、北川社長の著書『祈り方が9割』を読んで感想文を事前に提出すると、無条件で最終面接まで進むことができます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語で計算処理をするなら「COMPUTE文」|入門用語辞典
- COBOL言語の「ACCEPT文」の使い方を分かり易く解説|入門用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|入門用語辞典
- 徹底解説!一歩先を行くCOBOL言語のCOPY文活用法|応用ガイド
- 一歩先を行くCOBOL言語の表操作!逐次検索と二分検索|応用ガイド
- COBOL言語の加算処理の基本を伝授! 命令文「ADD」とは?|入門用語辞典
- 徹底解説!一歩先を行くCOBOL言語のファイル併合処理|応用ガイド
- COBOL言語でファイルの開閉命令はOPEN文とCLOSE文!|入門用語辞典
- 徹底解説!一歩先を行くCOBOL言語のデータ共有|応用ガイド
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- COBOL言語の歴史とこれまでの進化を知る!廃止・追加機能|基礎ガイド
- COBOL言語のオブジェクト指向について理解しよう!|基礎ガイド
- COBOL言語のディスプレイ出力とコンソール入力について|基礎ガイド
- COBOL言語が得意とする計算処理を体験してみよう!|基礎ガイド
- 一歩先を行くCOBOL言語のユーザ定義関数について|応用ガイド
- 初心者から中級者でも安心!理解できるCOBOL言語の勉強法|学習講座
- 初心者必見!COBOL言語を効率よくマスターする勉強法とは|学習講座
- COBOL初心者が犯しやすいミスとその対策について|学習講座
- COBOL初心者がやってはいけない勉強方法とは?|学習講座
- 一歩先へ行くCOBOLプログラマの知っておくべき4つのヒント|学習講座