COBOL言語の「REWRITE文」の使い方について理解しよう! | 用語辞典

COBOL(コボル)言語の予約語REWRITEを使ったファイルの更新とは

辞典・辞書-REWRITE-イメージ

COBOL(コボル)言語のREWRITE文とは?

COBOL(コボル)を使ったファイル操作は、実際の開発現場でもよく使われています。今回ご紹介するREWRITE文は、そのファイル操作の1つで、ファイルのレコードを更新したい場合に使用します。あるファイルを読み込んで別のファイルに書き出す際に使用するWRITE文と比べ、REWRITE文は、同じファイルのレコードを更新する際に使用するのが特徴です。では早速REWRITE文の使い方について見ていきましょう。

書き方:

REWRITE レコード名-1 〔FROM 一意名-1〕

〔END-REWRITE〕

  • レコード名-1:更新するレコード記述項を記載します
  • 一意名-1:レコード名-1の更新内容を記載します

使用例:

辞典・辞書-REWRITE-使用例

使用例は、入力ファイルから1レコード読み込み、指定した値に更新するプログラムです。この使用例のように、ファイルのレコード項目を初期化して次の処理につなげたい場合などに、REWRITE文は大変便利です。

入力ファイル(sample.txt):

辞典・辞書-REWRITE-入力ファイ

実行結果:

辞典・辞書-REWRITE-実行結果

出力ファイル(sample.txt):

辞典・辞書-REWRITE-出力ファイル

REWRITE文のCOBOL(コボル)言語における基本事項やルールについて

  1. 「REWRITE」「END-REWRITE」の間の空白や改行は、自由に設定できます。
  2. 「レコード名-1」は、データ部のファイル節で指定したレコードを指定する必要があります。
  3. 「FROM 一意名-1」は、省略する事ができます。
    また、省略した際の「レコード名-1」の更新は MOVE文で代用する事ができます。
  4. REWRITE文の実行前には、対象レコードのREAD文が正常に実行されている必要があります。

COBOL(コボル)言語のREWRITE文を扱う上での注意点

ファイルを読み込む際は、入出力両用モード(I-O指定)で開く必要があります。

従って、ファイルのオープンモードが、読み込み用の入力モード(INPUT)、書き込み用の出力モード(OUTPUT)、追加書き込み用の拡張モード(EXTEND)の場合には、REWRITE文を使用する事はできません。

REWRITE文を使ったCOBOL(コボル)プログラムの活用法

REWRITE文は、ファイルのレコードを初期化する際や、毎回利用するマスタファイルのレコードを更新する際に便利に使用できます。ここでは活用法として、ファイルのレコード全てに対して、日付を処理日付に更新し、レコード数分連番を付与してファイル出力する簡単なプログラムをご紹介します。

サンプルプログラム(REWRITE_SAMPLE02):

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. REWRITE_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5.  
  6. *> -- 更新ファイルを指定 --
  7. FILE-CONTROL.
  8. SELECT SAMPLE-FILE ASSIGN TO 'sample.txt'
  9. FILE STATUS IS IN-FILE-STATUS.
  10. DATA DIVISION.
  11. FILE SECTION.
  12. FD SAMPLE-FILE.
  13. 01 IN-FILE-REC.
  14. 03 IN-DATE PIC X(8).
  15. 03 IN-RENBAN PIC 9(2).
  16. 03 IN-SPACE PIC 9(1).
  17.  
  18. WORKING-STORAGE SECTION.
  19. 01 IN-FILE-STATUS PIC XX.
  20. 01 WK-IN-RENBAN PIC 9(2).
  21.  
  22. PROCEDURE DIVISION.
  23. DISPLAY "REWRITE START".
  24. MOVE ZERO TO WK-IN-RENBAN.
  25.  
  26. OPEN I-O SAMPLE-FILE.
  27. PERFORM READ-RTN.
  28.  
  29. *>1レコードずつ読み込む
  30. PERFORM UNTIL IN-FILE-STATUS NOT = "00"
  31.  
  32. MOVE FUNCTION CURRENT-DATE(1:8) TO IN-DATE
  33. ADD 1 TO WK-IN-RENBAN
  34. MOVE WK-IN-RENBAN TO IN-RENBAN
  35. REWRITE IN-FILE-REC
  36. END-REWRITE
  37.  
  38. PERFORM READ-RTN
  39. END-PERFORM.
  40. CLOSE SAMPLE-FILE.
  41. STOP RUN.
  42.  
  43. *> -- 更新ファイル読込処理 --
  44. READ-RTN SECTION.
  45. READ SAMPLE-FILE
  46. AT END
  47. DISPLAY "REWRITE END"
  48. NOT AT END
  49. CONTINUE
  50. END-READ.
  51. READ-EXIT.

入力ファイル(sample.txt):

辞典・辞書-REWRITE-入力ファイル

実行結果:

辞典・辞書-REWRITE-実行結果

出力ファイル(sample.txt)(※):

辞典・辞書-REWRITE-イメージ

(※)日付は実際の処理日(年月日)が設定されます。

今回ご紹介したREWRITEのサンプルプログラムは、ファイルのレコード項目を初期化したり、全てのレコードを加工編集した後、ファイル出力する方法をご紹介しました。ファイル操作は業務プログラムでもよく利用されます。しっかり使い方やその他のファイル操作との違いを理解し、さまざまな業務要件で活用できるようにしておきましょう。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門