COBOLのOPEN文(INPUT・OUTPUT・EXTEND)をやさしく解説!初心者でもわかるファイル操作
生徒
「COBOLでファイルを開くにはどうしたらいいんですか?」
先生
「それには、OPEN文を使います。INPUT、OUTPUT、EXTENDの3つの使い方がありますよ。」
生徒
「3つもあるんですか?それぞれ何が違うんですか?」
先生
「順を追って、わかりやすく説明しますね!」
1. OPEN文とは?
OPEN文は、ファイルを読み込む、書き込む、または追記するために使う命令です。COBOLでは、必ずファイルを使う前にOPENで「開く」必要があります。
例えると、本を読むときに「本を開く」必要があるように、ファイルも開いてから読み書きします。
2. INPUT:読み取り専用でファイルを開く
OPEN INPUTは、ファイルを読むために開きます。プログラムは書き込みできず、存在するデータを順番に読み取るだけです。
レシートの履歴を読んで画面に表示したり、データを集計したりする時に使います。
OPEN INPUT IN-FILE
3. OUTPUT:書き込み専用でファイルを開く
OPEN OUTPUTは、ファイルを新規に作成して書き込むときに使います。既に同じ名前のファイルがあると、中身がまるごと消されて新しくなります。
新しい報告書やログファイルを作るときに使います。
OPEN OUTPUT OUT-FILE
4. EXTEND:末尾に追記するときに開く
OPEN EXTENDは、既存のファイルの最後の位置に追記(append)するときに使います。古いデータを消さず、新しいデータをつなげて追加できます。
例えば、日々のログ記録や売上れきの追加にぴったりです。
OPEN EXTEND LOG-FILE
5. INPUT・OUTPUT・EXTENDの違いを図で考えると
本に例えると次のようなイメージで覚えられます:
- OPEN INPUT:本を読む(読むだけ)→ 既存の情報確認
- OPEN OUTPUT:古い本を破棄して新しい本をつくる(書き込む)
- OPEN EXTEND:古い本の最後のページに新しいページを追加する(追記)
6. サンプルコードで比べてみよう
実際に3つの使い方をまとめたサンプルをご紹介します。
IDENTIFICATION DIVISION.
PROGRAM-ID. OPEN-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO "input.txt" ORGANIZATION IS LINE SEQUENTIAL.
SELECT OUT-FILE ASSIGN TO "output.txt" ORGANIZATION IS LINE SEQUENTIAL.
SELECT LOG-FILE ASSIGN TO "log.txt" ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-RECORD PIC X(50).
FD OUT-FILE.
01 OUT-RECORD PIC X(50).
FD LOG-FILE.
01 LOG-RECORD PIC X(50).
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
OPEN OUTPUT OUT-FILE
OPEN EXTEND LOG-FILE
* 以降、READ/WRITE/WRITE などの処理
CLOSE IN-FILE OUT-FILE LOG-FILE
STOP RUN.
7. OPEN文で気をつけるポイント
- 使用用途に応じて正しいオープン方法を選ぶ(読取り・新規書き込み・追記)。
- 書き込み先ファイルが消えないように注意(OUTPUTは既存ファイルを消去)。
- 複数ファイルを開く場合は、全て忘れずにCLOSEする。
- ファイルが存在しないときにOUTPUTやEXTENDはエラーになる場合があります。
8. よく使う用語まとめ
- OPEN INPUT:ファイルを読む準備
- OPEN OUTPUT:ファイルを新しく書き出す準備
- OPEN EXTEND:ファイルに追記する準備
- CLOSE:使い終わったファイルを閉じる
まとめ
COBOLでファイルを操作するには、まずOPEN文を使って対象ファイルを明示的に開く必要があります。この記事では、OPEN INPUT・OPEN OUTPUT・OPEN EXTENDの3つの使い方について詳しく学びました。OPEN INPUTは読み取り専用で、既存のファイルからデータを取り出すときに使います。OPEN OUTPUTは新しくファイルを作成する場合に使われ、既存の内容は破棄される点に注意が必要です。そしてOPEN EXTENDは、すでに存在するファイルの末尾にデータを追加するための命令で、ログ追記や追加入力に便利です。
各モードは目的によって使い分けることが非常に重要で、誤ったモードを使うとファイルを誤って消去してしまう恐れもあります。そのため、ファイルの役割や処理の流れをよく理解した上でOPEN文を記述することが、エラーのない安定したプログラム作成には欠かせません。また、すべてのOPEN処理が終わったらCLOSE文でファイルをきちんと閉じるという一連の流れも、COBOLにおいては基本かつ重要なルールです。
実際の業務では、ファイルの読取専用や書き込み専用、追記などの要件が明確に定まっていることが多いため、それに応じて適切なOPEN文を選ぶ力が求められます。以下のコードは3種類のOPEN文を使った実践的な書き方のまとめです。
IDENTIFICATION DIVISION.
PROGRAM-ID. OPEN-DEMO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO "in.txt" ORGANIZATION IS LINE SEQUENTIAL.
SELECT OUT-FILE ASSIGN TO "out.txt" ORGANIZATION IS LINE SEQUENTIAL.
SELECT LOG-FILE ASSIGN TO "log.txt" ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-DATA PIC X(50).
FD OUT-FILE.
01 OUT-DATA PIC X(50).
FD LOG-FILE.
01 LOG-DATA PIC X(50).
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
OPEN OUTPUT OUT-FILE
OPEN EXTEND LOG-FILE
* 読み取り例
READ IN-FILE INTO OUT-DATA
AT END DISPLAY "ファイルの終わりです"
END-READ
* 書き込み例
MOVE "新しいデータ" TO OUT-DATA
WRITE OUT-DATA
* 追記例
MOVE "ログに追記します" TO LOG-DATA
WRITE LOG-DATA
CLOSE IN-FILE OUT-FILE LOG-FILE
STOP RUN.
このように、ファイルの使用目的に合わせてOPENの種類をしっかり使い分けることで、COBOLプログラムの可読性と安全性が高まります。ファイル処理は業務システムにおいて欠かせない要素ですので、基本をしっかり押さえておくことが大切です。
生徒
「OPEN INPUT・OUTPUT・EXTENDの違い、最初はちょっとややこしかったけど、例え話とかサンプルコードでだいぶ理解できました!」
先生
「よかったです。ファイルをどう使いたいのかによって、どのOPENモードを使うべきかが変わってきますからね。」
生徒
「OUTPUTだとファイルが消える可能性があるって話、ちゃんと覚えておきます。大事なデータが飛んだら大変だし……」
先生
「その意識はとても大切ですね。特に業務プログラムではデータの消失が大きな損失につながりますから。」
生徒
「OPEN文のあとは必ずCLOSEっていうのも、きちんと習慣にしたいです。やっぱりプログラムも礼儀正しくしないと(笑)」
先生
「その心がけが一番大事です。次はWRITEやREADについて、さらに詳しく見ていきましょうか。」