COBOLのファイル入出力のエラーと解決策まとめ!初心者向けやさしく解説
生徒
「COBOLでファイルを読み書きしていると、エラーが出ることがあるんですが、どうすればいいんですか?」
先生
「とても大事なポイントですね。COBOLでは、ファイル操作をするときに注意すべきエラーがいくつかあります。」
生徒
「パソコン初心者なので、何を見ればいいのかもわからなくて困っています…」
先生
「大丈夫ですよ。今回は、ファイル入出力でよくあるエラーの原因と、その対処方法をわかりやすく説明していきますね!」
1. ファイル入出力とは?
まずは基本から説明します。ファイル入出力とは、パソコンの中のデータファイル(例えば、メモ帳で作ったようなデータ)を、読み込んだり(入力)、書き込んだり(出力)することです。
COBOL(コボル)というプログラミング言語では、この操作をOPEN、READ、WRITE、CLOSEといった命令で行います。これらの命令の使い方が間違っていると、エラーが発生します。
2. ファイルエラーの基本とチェック方法
ファイル操作でエラーが起こったとき、COBOLではFILE STATUS(ファイルステータス)という仕組みを使って、何が問題なのかを判断できます。
これは、あらかじめ決められたコード(例:10、30、90など)で、原因を教えてくれます。
たとえば、こんなコードを書いておくことで、エラーの内容を知ることができます。
FD MY-FILE
LABEL RECORDS ARE STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
DATA RECORD IS MY-RECORD.
01 MY-RECORD PIC X(50).
WORKING-STORAGE SECTION.
01 FILE-STATUS PIC XX.
PROCEDURE DIVISION.
OPEN INPUT MY-FILE
IF FILE-STATUS NOT = "00"
DISPLAY "ファイルオープンエラー:" FILE-STATUS
STOP RUN
END-IF.
3. よくあるファイルエラーとその原因
COBOLでよくあるファイルエラーには、次のようなものがあります。
① ファイルが見つからない(ステータス:35)
パソコンの中に指定されたファイルがない場合に起こります。読み取り(READ)や入力(INPUT)のときに、存在しないファイルを開こうとすると出ます。
対処法:ファイルの名前、場所、拡張子(例:.dat や .txt)をもう一度確認しましょう。
② ファイルがすでに使われている(ステータス:91)
他のプログラムでそのファイルが開かれていたり、前に開いたままになっていたりすると、アクセスできないことがあります。
対処法:他のアプリやプログラムでファイルが開かれていないか確認しましょう。必要があれば、COBOL内でCLOSE命令を入れて、ファイルをきちんと閉じておきましょう。
③ 書き込みできない(ステータス:30)
ファイルに書き込みたいけど、許可がなかったり、フォルダが読み取り専用だったりすると発生します。
対処法:ファイルやフォルダのアクセス権(アクセスけん)を確認してください。必要に応じて、書き込み可能な場所にファイルを保存しましょう。
4. ファイルステータスコード一覧(代表的なもの)
ファイルステータスコードは数字2桁で示され、各番号には意味があります。ここでは初心者の方にも覚えやすいよう、代表的なステータスを表にまとめます。
| コード | 意味 | 対処方法 |
|---|---|---|
| 00 | 正常に処理された | 問題なし |
| 10 | 読み取りの終わり | ファイルの最後。LOOP終了処理が必要 |
| 30 | 入力・出力エラー | ファイルのアクセス許可やデバイス確認 |
| 35 | ファイルが存在しない | ファイル名やパスを再確認 |
| 91 | ファイルが未オープンまたは多重オープン | OPEN処理またはCLOSE漏れを確認 |
5. エラー処理を入れて、安全なプログラムを作ろう
ファイル操作をするたびに、必ずエラーが起きるとは限りません。でも、エラーが起きたときの準備をしておくことで、予期せぬ停止やデータ破損を防げます。
以下は、ファイルオープン時のエラー処理をしっかり入れたサンプルです。
WORKING-STORAGE SECTION.
01 FILE-STATUS PIC XX.
01 ERROR-MESSAGE PIC X(50).
PROCEDURE DIVISION.
OPEN INPUT MY-FILE
IF FILE-STATUS = "00"
CONTINUE
ELSE
MOVE "ファイルを開けませんでした。" TO ERROR-MESSAGE
DISPLAY ERROR-MESSAGE
DISPLAY "ステータスコード:" FILE-STATUS
STOP RUN
END-IF.
6. ファイル操作でよく使う命令の順番を知ろう
COBOLでファイルを扱うときは、命令の順番がとても大切です。順番を間違えると、正常に動かなくなってしまいます。
- SELECT文(環境設定)で、ファイルの名前を決める
- OPENでファイルを開く
- READまたはWRITEで読み書きする
- CLOSEでファイルを閉じる
これを守れば、エラーをかなり防ぐことができます。
7. ファイルエラーを防ぐちょっとしたコツ
初心者の方がエラーを防ぐためのコツをいくつかご紹介します。
- ファイル名やパスは半角英数字を使う
- ファイル操作ごとにFILE STATUSをチェック
- エラー表示用のメッセージを用意しておく
- プログラム中にCLOSEを忘れずに入れる
- 読み取り専用のフォルダではなく、書き込み可能な場所を使う
まとめ
COBOLでファイル入出力を行うときに起きやすいエラーについて振り返ってみると、エラーの多くは「ファイルが開けない」「書き込めない」「読み取れない」といった基本的なポイントに集約されることがわかる。とくにファイルステータスの確認は、初心者がつまずきやすい場所でありながら、正しく使えるようになるとトラブルの原因がすぐに見つけられるようになる重要な仕組みである。ファイル名の誤り、アクセス権の不足、多重オープンなど、日常的に起こりうる問題を丁寧に切り分けることで、安全で安心できるプログラム運用につながる。 さらに、COBOLでは命令の順番も非常に大切であり、SELECT、OPEN、READ/WRITE、CLOSEという流れを守ることで、エラーの発生を大幅に減らすことができる。ファイルの扱い方を正しく理解しておくと、読み取り専用ファイルと書き込み可能ファイルを区別する判断力が身につき、ファイルの存在確認やアクセス権の確認といった実務的な作業もスムーズに進められるようになる。COBOLで安定したシステムを開発するためには、こうしたファイル操作の基礎をしっかり押さえることが避けて通れない道となる。 また、ファイルステータスの管理によって、プログラムがどこで失敗したのかを正確に把握できるため、トラブルが起きても焦らずに原因を追うことができる。エラーコードの意味が理解できると、例えば「ファイルがない」「書き込みできない」「すでにオープンされている」などの状態がすぐに判断でき、プログラム修正の時間を大幅に短縮できる。初心者ほどエラーに出会ったときに解決方法がわからず困ってしまうが、ステータスコードを確認するだけで道筋が見えやすくなるため、エラー処理の学習は非常に価値が高い。 実務現場では、ファイルが存在しない場合に自動的に生成したり、読み取り専用モードと出力モードを使い分けたりする場面がよくあるため、ファイル操作の理解は避けて通れない。とくに固定長ファイルを扱うシステムでは、読み取りの終わりを判定するステータス10の扱いが非常に重要であり、誤って無限ループに陥らないためにもファイル終端の判定処理を正確に入れておく必要がある。こうした注意点を理解しながら作業を進めていくことで、より安全で信頼性の高いプログラムを作ることが可能になっていく。 以下に、エラー処理を組み込んだより丁寧なサンプルプログラムを示すので、実際の動きとあわせて理解を深めていくとよいだろう。
エラー処理つきサンプルプログラム
WORKING-STORAGE SECTION.
01 FILE-STATUS PIC XX.
01 ERROR-MSG PIC X(80).
PROCEDURE DIVISION.
OPEN INPUT SAMPLE-FILE
IF FILE-STATUS NOT = "00"
MOVE "ファイルを開けません。" TO ERROR-MSG
DISPLAY ERROR-MSG
DISPLAY "ステータス:" FILE-STATUS
STOP RUN
END-IF
READ SAMPLE-FILE
AT END
DISPLAY "読み取り終わり(ステータス10)"
NOT AT END
DISPLAY "レコード読み込み成功"
END-READ
CLOSE SAMPLE-FILE
IF FILE-STATUS NOT = "00"
DISPLAY "ファイルクローズエラー:" FILE-STATUS
END-IF.
この例のように、ファイル操作ごとにステータスチェックを入れることで、予期せぬ止まり方を防ぎ、プログラムをより信頼性の高い形で構築できる。読み取り終了やアクセス拒否のような状況を丁寧に区別しながら処理していくことが、エラーの少ないCOBOLプログラムを作る上で大切なポイントである。さらに、ファイル名やパス指定を正しく行うこと、書き込み可能なフォルダへアクセスすること、ファイルを他のアプリが開いたままにしないことなど、細かな確認が習慣化すると、ファイルエラーは驚くほど減っていく。 また初心者の場合、プログラム中にCLOSEを忘れることが非常によくあるが、これはファイルが解放されず次回の実行でエラー91が出る原因になるため、こまめにCLOSEを書く癖をつけることが重要である。こうした基本を着実に積み重ねることで、ファイル入出力の理解が深まり、今後の学習にも大きく役立つ。ファイル操作はCOBOLの根幹ともいえる分野であり、しっかり理解しておけば多くの業務処理にも応用が利くため、繰り返し練習しながら身につけていくことが望ましい。
生徒「今日の内容で、エラーの原因がすごくイメージしやすくなりました。とくにステータスコードが役に立つってことがよくわかりました!」
先生「そうですね。ステータスを見れば、どこで問題が起きているのかがほとんど判断できますから、とても便利なんですよ。」
生徒「ファイルの多重オープンとか、読み取り専用フォルダとか、普段気にしていなかったところがエラーの原因になるって知れてよかったです。」
先生「エラーの仕組みがわかると、プログラムの見直しもスムーズになります。実務でも頻繁に役に立ちますよ。」
生徒「CLOSEを書き忘れるだけでもエラーになるのが意外でした。今後はしっかり気をつけます!」
先生「その調子です。こういう細かな積み重ねが、安定したCOBOLプログラムの基礎になりますからね。」
生徒「ファイル入出力が前よりずっと理解しやすくなりました!次のステップも頑張ってみます。」
先生「わからないところがあれば、いつでも一緒に確認していきましょう。」