COBOLのWRITE文の使い方を完全ガイド!初心者でもわかるレコード出力処理
生徒
「先生、COBOLでデータをファイルに書き出す方法ってありますか?」
先生
「はい、COBOLではWRITE文という命令を使って、ファイルにレコードを書き込むことができますよ。」
生徒
「ファイルって、例えばメモ帳で開けるようなものですか?」
先生
「そうですね。COBOLで扱うファイルもテキスト形式で、中身をメモ帳などで見ることができますよ。実際の例で一緒に見ていきましょう!」
1. COBOLのWRITE文とは?
COBOLのWRITE文は、ファイルにレコード(1行のデータ)を書き込むための命令です。たとえば、お客様の情報や商品のデータを、1行ずつファイルに保存するのに使います。
「レコード」とは、簡単にいうと「ひとまとまりの情報」です。たとえば「山田 太郎 30歳」という情報が1つのレコードになります。
2. WRITE文を使った基本構文
まずは、基本的な構文を見てみましょう。
WRITE 出力レコード名
AFTER ADVANCING 1 LINE.
AFTER ADVANCING は改行の指定です。「1 LINE」は1行分の改行という意味です。印刷やレポート形式の出力にも使われます。
3. サンプルプログラムで理解するWRITE文
では、実際に「顧客情報」を1件ずつファイルに書き出すサンプルプログラムを見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. WRITE-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE ASSIGN TO "customer.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-RECORD.
05 CUSTOMER-NAME PIC A(20).
05 CUSTOMER-AGE PIC 99.
WORKING-STORAGE SECTION.
01 WS-NAME PIC A(20) VALUE SPACES.
01 WS-AGE PIC 99 VALUE ZEROS.
PROCEDURE DIVISION.
MAIN-PARA.
MOVE "YAMADA TARO" TO WS-NAME.
MOVE 30 TO WS-AGE.
OPEN OUTPUT CUSTOMER-FILE.
MOVE WS-NAME TO CUSTOMER-NAME.
MOVE WS-AGE TO CUSTOMER-AGE.
WRITE CUSTOMER-RECORD AFTER ADVANCING 1 LINE.
CLOSE CUSTOMER-FILE.
STOP RUN.
この例では、「YAMADA TAROさん(30歳)」のデータを1行のレコードとして customer.txt に出力しています。
4. 実行結果のイメージ
このプログラムを実行すると、customer.txt に以下のような内容が出力されます。
YAMADA TARO 30
20文字分の名前と2桁の年齢が1行で表示されます。
5. 出力する前に必要なOPEN命令
WRITE文を使う前に、ファイルを開く必要があります。それがOPEN OUTPUTという命令です。
OUTPUTは「出力専用」という意味で、「このファイルにデータを書き込みますよ」という宣言です。
書き込みが終わったら、CLOSEで必ずファイルを閉じてください。
6. なぜWRITE文が必要なの?
パソコンでデータを管理するとき、いちいち手作業でメモ帳に書くのは大変ですよね。WRITE文を使えば、COBOLプログラムが自動でファイルにデータを書いてくれます。
銀行や保険会社、役所などの大量の情報も、COBOLとWRITE文で効率的に保存しているんですよ。
7. よくあるミスと対処法
- OPENし忘れ:WRITEの前に必ず
OPEN OUTPUTが必要です。 - データのMOVE忘れ:WORKING-STORAGEの変数を、レコードにMOVEしてからWRITEしましょう。
- ファイル名の間違い:OS上で使用できるファイル名を確認しましょう。
8. ファイル出力の活用シーン
COBOLのWRITE文は、次のような場面でよく使われます:
- 売上データの出力
- 請求書情報の作成
- 顧客情報の保存
- 従業員の勤務記録の出力
実際のビジネスでも非常に重要な役割を果たしている機能です。
9. 書き込みモードの種類
OPEN OUTPUT は、ファイルを新しく作成して書き込むモードです。
すでに同じ名前のファイルがある場合は、上書きされてしまうので注意しましょう。
書き込みモードを間違えると、大切なデータが消えてしまう可能性もあります。
まとめ
COBOLにおけるWRITE文は、業務システムで頻繁に登場する重要な命令の一つです。今回の記事では、ファイル出力の基本から具体的なサンプルプログラムまでを通して、レコードをファイルに書き出す方法を丁寧に解説しました。特に、「OPEN OUTPUT」でファイルを開いてから「WRITE」で書き込み、「CLOSE」で閉じるという一連の流れがCOBOLのファイル処理では不可欠です。
また、WORKING-STORAGEの変数にデータを準備し、MOVE文でファイルレコード定義に値をコピーする工程も非常に大切です。初心者のうちはMOVEやOPENの抜け漏れが原因で正しく出力されないことも多いので、今回紹介した「手順を守る」姿勢がエラーを防ぐ最大のポイントになるでしょう。
以下に、この記事の内容をもとにしたシンプルなファイル出力のCOBOLプログラム例をまとめておきます。
IDENTIFICATION DIVISION.
PROGRAM-ID. OUTPUT-DEMO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE ASSIGN TO "employee.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE.
01 EMP-RECORD.
05 EMP-NAME PIC A(20).
05 EMP-ID PIC 9(4).
WORKING-STORAGE SECTION.
01 WS-NAME PIC A(20) VALUE "SUZUKI HANAKO".
01 WS-ID PIC 9(4) VALUE 1001.
PROCEDURE DIVISION.
OPEN OUTPUT EMP-FILE
MOVE WS-NAME TO EMP-NAME
MOVE WS-ID TO EMP-ID
WRITE EMP-RECORD AFTER ADVANCING 1 LINE
CLOSE EMP-FILE
STOP RUN.
この例では、「SUZUKI HANAKO」という名前と社員ID「1001」を1レコードとしてemployee.txtに出力します。WRITE文は、ファイルに対して人の代わりに記録を残すための手段であり、COBOLの強力な機能の一つです。
書き込み後のファイル内容は以下のようになります。
SUZUKI HANAKO 1001
今後、顧客情報や売上データなど実務で扱う多くのデータを効率的にファイル出力するためには、WRITE文の基本を理解していることが前提となります。この記事を通じて、ファイルの扱い方を身につける第一歩となったことでしょう。
ファイル名のスペル、レコードの定義、MOVE漏れ、OPENやCLOSEの忘れなど、細かい部分に注意を払いながらプログラムを書く習慣が大切です。ファイル出力のミスは業務への影響が大きいため、基礎をしっかりと身につけることで信頼される開発者に近づけるはずです。
最後にもう一度確認しておきたいポイント:
- WRITE文は1レコードずつファイルへ出力する
- 出力の前に必ずOPEN OUTPUTでファイルを開く
- データはMOVEで正しくレコードに反映させる
- 書き込み後は必ずCLOSEでファイルを閉じる
- ファイルの指定はOSに合った名前で
WRITE文は地味に見えても、COBOLのシステムにおいて非常に重要な役割を担っています。正しく使えるようになれば、COBOLプログラムの幅が一気に広がることでしょう。
生徒
「WRITE文って、すごく大事なんですね。ファイルに書き出すって意外と簡単でした!」
先生
「そうですね。ポイントを押さえれば難しくありません。特に、OPENとMOVEの順番を意識できていましたか?」
生徒
「最初はMOVEを忘れて空っぽのレコードが出力されちゃって…でも原因がわかってからはすぐ直せました!」
先生
「素晴らしい経験ですね。エラーに気づけるのも大切なスキルですよ」
生徒
「それに、銀行や保険でも使われてるって知って、責任のある処理なんだと感じました」
先生
「その通りです。だからこそ、基本の書き方をしっかりマスターして、安心して任せられるプログラムを目指しましょうね」
生徒
「はい!次はREWRITE文やDELETE文も覚えて、もっとファイル操作を極めてみたいです!」
先生
「いい意気込みですね。着実にステップアップしていきましょう」