カテゴリ: COBOL 更新日: 2025/11/18

COBOLのREWRITE文でレコードを更新しよう!初心者向け完全ガイド

REWRITE文を使ったレコードの更新方法
REWRITE文を使ったレコードの更新方法

先生と生徒の会話形式で理解しよう

生徒

「先生、COBOLでファイルに書いたデータをあとから直すことってできますか?」

先生

「はい、既にあるレコードをその場で変更できるのがREWRITE文です。」

生徒

「どうやって更新するんですか?なんだか難しそうです…」

先生

「順を追って、わかりやすく説明しますね!」

1. REWRITE文とは?

1. REWRITE文とは?
1. REWRITE文とは?

REWRITE文は、COBOLでファイルの中に既に存在しているレコード(1行のデータ)を新しい内容で上書きする命令です。

「上書き編集」や「更新処理」とも呼ばれ、誤った情報を直したり、最新の値に変更したりする時に使います。

2. 更新する流れをイメージしてみよう

2. 更新する流れをイメージしてみよう
2. 更新する流れをイメージしてみよう

レコードの更新は、大きく次の手順で行います:

  1. READ文で対象のレコードを読み込む
  2. 更新したいデータをMOVE文で新しい値にする
  3. REWRITE文で上書き保存する

ノートの書き間違いを消して正しい文字を書き直すイメージと同じです。

3. UPDATEのための基本構文

3. UPDATEのための基本構文
3. UPDATEのための基本構文

READ ファイル
    AT END
        ...終了処理...
END-READ
MOVE 新しい値 TO レコード項目
REWRITE レコード

このように、まず読み込んでから内容を書き換えて、最後に更新します。

4. サンプルプログラムで実践

4. サンプルプログラムで実践
4. サンプルプログラムで実践

IDENTIFICATION DIVISION.
PROGRAM-ID. REWRITE-SAMPLE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT IN-FILE ASSIGN TO "data.txt"
        ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-REC PIC X(30).

WORKING-STORAGE SECTION.
01 END-FLAG PIC X VALUE "N".
   88 END-OF-FILE VALUE "Y".
   88 NOT-END VALUE "N".

PROCEDURE DIVISION.
    OPEN I-O IN-FILE

    PERFORM UNTIL END-OF-FILE
        READ IN-FILE
            AT END
                SET END-OF-FILE TO TRUE
            NOT AT END
                IF IN-REC CONTAINS "OLD"
                   MOVE "NEW VALUE           " TO IN-REC
                   REWRITE IN-REC
                END-IF
        END-READ
    END-PERFORM

    CLOSE IN-FILE
    STOP RUN.

この例では、ファイルの中に「OLD」という文字がある行を探して、「NEW VALUE」に置き換えて更新しています。

5. OPENモードはI-O(読み書き)

5. OPENモードはI-O(読み書き)
5. OPENモードはI-O(読み書き)

REWRITE文を使うためには、ファイルを読み書き両方できるOPEN I-Oで開く必要があります。

INPUTOUTPUTでは更新できません。

6. REWRITEが使える条件と注意点

6. REWRITEが使える条件と注意点
6. REWRITEが使える条件と注意点
  • ファイルはOPEN I-Oで開く
  • READで目的のレコードを読み込む必要がある
  • 更新後の内容の長さは、元と同じレコードサイズであること
  • 全角・半角や文字数がずれると、上書き位置がずれる可能性があります

7. 実習イメージと画面例

7. 実習イメージと画面例
7. 実習イメージと画面例

たとえば、data.txtが次のような内容だったとします:


ITEM001 OLD    100
ITEM002 VALUE  200

REWRITE処理後、ITEM001行は:


ITEM001 NEW VALUE100

「OLD」が「NEW VALUE」に上書きされました。

8. よくある失敗と解決方法

8. よくある失敗と解決方法
8. よくある失敗と解決方法
  • OPENモードを間違える → I‑Oで開いているかチェックしてください
  • READしないでREWRITE → 書き換え位置が不明のままです
  • 長さが違うデータを書く → PICやサイズを合わせましょう

9. REWRITEと他のファイル命令の整理

9. REWRITEと他のファイル命令の整理
9. REWRITEと他のファイル命令の整理
  • READ:レコードを読み込む
  • WRITE:新しくレコードを追加する
  • REWRITE:読み込んだレコードを上書き更新する
  • DELETE:レコードを削除する(後続記事で説明予定)

まとめ

まとめ
まとめ

COBOLのREWRITE文は、既存レコードを正確に更新するために欠かせない基本構文であり、業務処理の中でも頻繁に利用される重要な操作です。実際の現場では取引データの修正、顧客情報の変更、在庫数量の更新など、日常的にさまざまな更新処理が行われています。そのため、READ文で正確にレコードを取得し、MOVE文で必要な項目を変更し、REWRITE文で上書き保存するという一連の流れを確実に理解しておくことが、安定した業務プログラムを作成するうえで非常に重要になります。とくにCOBOLではレコードサイズが固定であることが多く、更新内容の文字数が適切でないとデータがずれたり、意図しない領域を書き換えてしまうこともあり得ます。そのため、PIC句とレコード構造を念入りに確認しながら更新処理を組み立てる姿勢が求められます。 また、REWRITE文を使用する際にはファイルをOPEN I-Oで開く必要があり、この点を誤ると更新処理が正しく動作しません。業務プログラムでは複数のファイルを同時に扱うことも多いため、ファイルごとのオープンモードを意識することが自然と身についてくるはずです。加えて、READ文を実行せずにREWRITEを行おうとすると、更新対象のレコード位置が不明なままになり、期待した結果にならないため、この順序をしっかり覚えておくことが大切です。COBOLのファイル処理はシンプルでありながら確実性が高く、金融システムや大規模基幹システムのような高精度な処理が求められる場所で今も強く支持されています。その根底にあるのが、今回扱ったREWRITE文を含むファイル操作命令です。 更新処理を扱うプログラムでは、単純な置き換えだけでなく、条件分岐や繰り返し処理と組み合わせることも多くあります。たとえば、特定の値を持つレコードだけを更新したり、範囲条件に一致するデータを順に修正したりといった実用的な処理が求められます。PERFORM UNTIL構文と併用することで、ファイルの終端まで自動で読み進めながら更新処理を繰り返すことが可能になり、業務プログラムらしい連続処理が自然に実装できます。こうした構造が読みやすく整理されているほど、後続の保守担当者が安全に修正を行えるため、COBOLの文法に沿った丁寧な書き方を心がけることが長期的な安定運用にもつながります。 さらに、REWRITE文は、READ・WRITE・DELETEと並んでファイル操作の基本命令として体系的に覚えておきたい要素であり、更新だけでなく追加処理や削除処理との使い分けも重要です。ファイルの内容を扱うシステムでは、これらの命令を正確に理解し使い分けることで、複雑な業務ロジックにも柔軟に対応できます。特に更新処理は数値計算や文字列置換などと密接に関係しているため、値の加工を行ってからREWRITEするという一連の作業が自然と身につくようになります。今回の内容を踏まえれば、実際の業務に近い処理にも応用しやすく、より実践的なプログラミングへ近づけるはずです。 以下に、条件に合わせてレコードを更新する典型的な例をまとめておきます。REWRITEの仕組みを振り返るためにも役立ててください。

サンプルプログラム(条件付き更新の実例)

次のプログラムは「数量が一定以上なら割引コードを付与する」という処理を更新として実行する例です。


PERFORM UNTIL END-FLAG = "Y"
    READ STOCK-FILE
        AT END
            MOVE "Y" TO END-FLAG
        NOT AT END
            IF AMOUNT > 100
                MOVE "DISCOUNT" TO STATUS-FIELD
                REWRITE STOCK-REC
            END-IF
    END-READ
END-PERFORM

条件分岐と更新処理を組み合わせることで、実務に近いレコード管理が可能となります。このような構造は基幹業務プログラムでもよく利用され、処理対象を選別しながら効率的に更新を行う際にたいへん便利です。レコードの読み込み、条件判定、更新処理という流れが自然に整理されているため、後から見ても理解しやすい点も大きな特徴となります。更新処理を安全に行うためには、読み込んだレコードが適切に加工されているか、値の長さが正しいか、ファイルの状態が正しく保たれているかを逐一確認する習慣が重要です。こうした基本を積み重ねていくことで、より高度なファイル操作にも迷わず取り組めるようになります。

先生と生徒の振り返り会話

生徒「REWRITE文の仕組みがだいぶわかってきました。同じレコードをそのまま書き換えるという動きをイメージできるようになりました。」

先生「その調子です。読み込んだデータを加工して、必要なときにだけ更新するという流れを理解しておくと、業務システムで役立つ場面がとても多くありますよ。」

生徒「ファイルをI-Oで開く理由も分かりました。読み込みと書き込みを両方するからなんですね。」

先生「その通りです。モードを間違えると更新できないので気をつけてくださいね。REWRITE文はWRITEやREADと同じくらい基本的な命令なので、自然に使えるようになると一気にプログラムの幅が広がります。」

生徒「特定の条件に合うレコードだけを更新する例も実務っぽくて理解しやすかったです。もっと練習して慣れていきたいです!」

先生「いろいろ触ってみるのが一番の学びになります。今日の内容を土台にして、次は削除処理なども扱えるようになりましょう。」

カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法