COBOL言語で出力ファイルに書き出すには「WRITE文」で! | 用語辞典

COBOL(コボル)言語の予約語WRITEを使った命令文の書き方とは

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

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

COBOL(コボル)におけるWRITE文は、出力ファイルにレコードを書き込む場合に使用する命令文です。出力ファイルへ書き込むときは、他のプログラミング言語同様に、事前に書き込むファイルを指定したり、ファイルをオープンしておく必要があります。

本記事では、WRITE文の基本的な使い方やルール、注意点などをご紹介します。

書き方1-1:(入出力に関するセクションを指定する)

ファイルにレコードを書きこむ前に、ファイルの情報を設定しておく必要があります。

「ENVIRONMENT DIVISION」に以下を記述します。

INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT [ファイル変数] ASSIGN TO ['ファイル名']
ORGANIZATION IS LINE SEQUENTIAL.

まず、「INPUT-OUTPUT SECTION」でファイル入出力のセクションを指定し、ファイルの情報を設定するために「FILE-CONTROL」を記述します。

次にSELECT文でファイル書き込み時に指定する、ファイルの変数を定義して、ASSIGIN TOの後にファイル名を指定します。

書き方1-2:(ファイルに関するセクションを指定する)

実際に書き込むファイルと、書き込み時に使用するレコードを設定します。

「DATA DIVISION」に以下を記述します。

FILE SECTION.
FD [ファイル変数].
[ファイルレコード変数].

書き込むファイルを指定するために「FILE SECTION」を記述し、FD(ファイルディスクリプション)にSELECT文で指定したファイル変数を指定します。

次に書き込むファイルレコード用の変数を定義しておきます。

書き方1-3:(書き込み処理)

「MAIN SECTION」で実際にレコードを書き込む処理を記述します。

OPEN OUTPUT [ファイル変数].
WRITE [出力レコード].
CLOSE [ファイル変数].

まず「OPEN OUTPUT」でファイル変数を指定して、ファイルをオープンします。

次にWRITE文で、ファイルレコードとして定義した変数を指定し、実際にファイルにレコードを書き込みます。

レコードの書き込みが完了したら、必ずCLOSE文でファイル変数を指定して、ファイルを閉じます。

書き方1-1~1-3を踏まえて、実際にファイルに書き込む処理の簡単なサンプルを、以下に紹介します。

使用例:

辞典・辞書-WRITE-使用例:

実行結果:

辞典・辞書-WRITE-実行結果:

紹介したサンプルでは、書き込み用ファイルにtest.txtを指定して、ファイル用の変数に10を転記し、WRITE文で書き込んでいます。

このプログラムを実行すると、実行プログラムと同じディレクトリにtest.txtが作成され、書き込んだレコード内容が、ファイルに記載されていることがわかります。

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

  1. WRITEの後の出力レコード名は、データ部で定義したレコード名でなければいけません。
  2. WRITEの後の出力レコード名は、各要素間や空白、改行などは自由に設定できます 。
  3. WRITE文実行後は、必ずCLOSE文でファイルを閉じます。

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

COBOLにおけるファイル入出力は、前述したようにWRITE文で書き込む前に、さまざまな準備が必要です。

CやJavaなどのプログラミング言語と異なる点として、ファイルにレコードを書き込むときは、必ずファイルディスクリプションで定義したファイル変数を、指定しなければいけません。

例えば、WRITE文で指定したファイル変数が、ファイルディスクリプションで指定したファイル変数ではなく、データ項目を指定してしまった場合、どうなってしまうのでしょうか?

以下にWRITE文で、ファイルレコード書き込み時に、通常のデータ項目を指定した場合のサンプルを紹介します。

辞典・辞書-WRITE-サンプル

実行結果:

辞典・辞書-WRITE-実行結果:

WRITE文は、ファイルディスクリプションで定義した、ファイル変数のみ書き込み可能なため、コンパイルエラーが出力されます。

特に初心者の方は、COBOLの規約を遵守しないと、思わぬところでエラーとなり、戸惑ってしまうこともありますので注意しましょう。

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

ファイルにレコードを書き込むときに必須のWRITE文ですが、連続してデータを書き込む場合は、繰り返し処理を行うPERFORM文の中で、WRITE文を実行すると便利です。

以下にPERFORM文を使用したループの中で、WRITE文で連続してデータを書き込むサンプルを紹介します。

  1. *> WRITE_SAMPLE03
  2. IDENTIFICATION DIVISION.
  3. PROGRAM-ID. WRITE_SAMPLE03.
  4.  
  5.  
  6. ENVIRONMENT DIVISION.
  7. *>入出力に関するセクション
  8. INPUT-OUTPUT SECTION.
  9. FILE-CONTROL.
  10. *>SELECT文でファイル定数とASSIGN TOでファイル名を設定する
  11. SELECT TEST-FILE ASSIGN TO 'test.txt'
  12. *>データの区切りを改行にしたい場合は以下を設定する
  13. ORGANIZATION IS LINE SEQUENTIAL.
  14.  
  15.  
  16. *>文字列と数字を扱うデータ項目を定義する
  17. DATA DIVISION.
  18. FILE SECTION.
  19. *>FDはファイルディスクリプション
  20. FD TEST-FILE.
  21. 01 OUT-FILE-REC PIC 99.
  22. WORKING-STORAGE SECTION.
  23. *>変数を定義し、0で初期化する
  24. 01 LINE-COUNT PIC 99 VALUE 0.
  25.  
  26.  
  27. PROCEDURE DIVISION.
  28. MAIN SECTION.
  29.  
  30. *>ファイルをアウトプット用にオープンする
  31. OPEN OUTPUT TEST-FILE.
  32.  
  33. *>5回ループする
  34. PERFORM 5 TIMES
  35. *>LINE-COUNTの値を1ずつ増やす
  36. ADD 1 TO LINE-COUNT
  37.  
  38. *>ファイル出力用変数に転記する
  39. MOVE LINE-COUNT TO OUT-FILE-REC
  40.  
  41. *>ファイルに書き込む
  42. WRITE OUT-FILE-REC
  43.  
  44. DISPLAY OUT-FILE-REC
  45. END-PERFORM.
  46.  
  47. *>ファイルをクローズする
  48. CLOSE TEST-FILE.
  49.  
  50.  
  51. STOP RUN.

実行結果:

辞典・辞書-WRITE-実行結果:

紹介したサンプルではPERFORM 5 TIMES~END-PERFORMの中で5回繰り返し処理を行い、値を1ずつ増やしてWRITE文でレコードを書き込んでいます。

PERFORM文が終了したら、必ずCLOSE文でファイルを閉じます。

作成されたファイルを確認すると、意図したとおり値が1~5まで書き込まれていることがわかります。

実際に複雑なデータをファイルに書き込む場合は、STRING文の文字列結合処理なども駆使して行う必要があり、応用力が求められます。

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

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

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

COBOL入門のカテゴリー

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