COBOL言語の順ファイルとファイル制御について解説!|基礎ガイド

COBOL(コボル)言語の順ファイルとファイル制御の書き方とは

基礎-順ファイル-イメージ

COBOL(コボル)言語の順ファイルとは?

順ファイルはCOBOL(コボル)における最も基本的なファイル編成で、ファイル作成時は格納するレコードを順番に書き込み、読み込むときは格納されているレコードを順番にアクセスします。そのため、新しいレコードは常に末尾に追加されます。

順ファイルの記述例:

*>入出力節
INPUT-OUTPUT     SECTION.
*>ファイル管理段落
FILE-CONTROL.
*>ファイルの宣言
SELECT [ファイル項目] ASSIGN TO [ファイル名]
*>ファイル編成の宣言
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS IN-FILE-STATUS.
*>ファイル節
FILE     SECTION.
*>ファイル記述項
FD [ファイル項目]

*>手続き部
PROCEDURE     DIVISION.

*>ファイル処理
OPEN [モード] [ファイル項目].
読み込み:READ
書き込み:WRITE
更新:REWRITE
ファイルを閉じる:CLOSE

順ファイルを読み込んで出力する

ここでは、実際に順ファイルのレコードを読み込んでデータ項目に保存し、ディスプレイに出力する方法を紹介します。
順ファイルは以下のような形式であらかじめ用意しておきます。
sample.txt————
Apple
Orange
Melon
Banana
Strawberry
——————————

サンプル:順ファイルを読み込んで出力する
基礎-順ファイル-サンプル

実行結果:
基礎-順ファイル-実行結果

このサンプルプログラムでは、ファイル管理段落で順ファイルを定義し、ORGANIZATION句ではLINE SEQUENTIALを指定しています。これはファイルの各レコードが1行のデータである可変長のレコードで構成され、復帰文字(CR)または改行文字(LF)で終了することを意味しています。

手続き部ではOPEN文のINPUTで入力モードを指定し、ファイルを開いています。

PERFROM文ではファイルのステータスが正常(00)である限り、ファイルを1件ずつ読み込んでファイル記述項で指定した項目にファイルのレコードを格納します。

読み込んだレコードはDISPLAY文で1行ずつレコードを出力し、ファイルを全て読み込んだら、CLOSE文でファイル制御を終了します。

COBOL(コボル)言語の順ファイルを扱う上での注意点

1. 順ファイルは単純なレコードを格納したり、読み込むのに向いていますが、指定したキーに対してレコードを取得したり、頻繁に検索や更新を行う場合には向いていません。そのような場合は相対ファイルを使用します。

2. COBOLのREAD文では、ファイルの内容を一度に読み込むのではなく、1件ずつ読み込みます。そのため、FD(ファイル記述項)で指定するデータ項目には1件のレコードサイズを指定します。

練習問題

順ファイルを作成してWRITE文でレコードを書き込んで保存し、書き込んだ順ファイルをREAD文で読み込んでレコードを出力するプログラムを作成してみましょう。

ファイルの書き込みはACCEPT文でコンソールからデータを入力し、"99"が入力されたら書き込みを終了する処理とします。

その後、書き込んだファイルを読み込んでレコードを1件ずつDISPLAY文で出力します。


回答:書き込んだ順ファイルを1件ずつ出力する

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. SEQUENTIALFILE_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. FILE-CONTROL.
  6. *>------------------------------
  7. *> ファイルを指定する
  8. *>------------------------------
  9. SELECT SAMPLE-FILE ASSIGN TO 'sample.txt'
  10. ORGANIZATION IS LINE SEQUENTIAL
  11. FILE STATUS IS IN-FILE-STATUS.
  12. DATA DIVISION.
  13. FILE SECTION.
  14. FD SAMPLE-FILE.
  15. 01 OUT-FILE-REC PIC X(50).
  16. 01 IN-FILE-REC PIC X(50).
  17. WORKING-STORAGE SECTION.
  18. 01 IN-FILE-STATUS PIC XX.
  19. 01 ITEM PIC X(50).
  20. PROCEDURE DIVISION.
  21. *>------------------------------
  22. *> ファイルの書き込み
  23. *>------------------------------
  24. OPEN OUTPUT SAMPLE-FILE.
  25. DISPLAY "レコードの書き込み";
  26. PERFORM UNTIL ITEM = "99"
  27. DISPLAY "レコードを入力してください(終了:99)。
  28. >> " WITH NO ADVANCING
  29. ACCEPT ITEM
  30. IF ITEM NOT= "99" THEN
  31. MOVE ITEM TO OUT-FILE-REC
  32. WRITE OUT-FILE-REC
  33. DISPLAY "WRITE: "OUT-FILE-REC
  34. END-IF
  35. END-PERFORM.
  36. CLOSE SAMPLE-FILE
  37. *>------------------------------
  38. *> ファイルの読み込み
  39. *>------------------------------
  40. OPEN INPUT SAMPLE-FILE.
  41. DISPLAY "レコードの読み込み";
  42. *>1レコードずつ読み込む
  43. PERFORM UNTIL IN-FILE-STATUS NOT = "00"
  44. READ SAMPLE-FILE
  45. AT END
  46. DISPLAY "READ END";
  47. NOT AT END
  48. DISPLAY "READ: "IN-FILE-REC
  49. END-READ
  50. END-PERFORM.
  51. CLOSE SAMPLE-FILE.
  52. STOP RUN.

■実行結果:
基礎-順ファイル-実行結果

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

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

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

COBOL入門のカテゴリー

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