本文へスキップ
BecomeCoder

COBOLコース · 第7章 ファイル処理の基本 ― 順編成ファイル · レッスン36

FDとSELECT ― ファイルを定義する

ローカル実施

導入

ファイルを扱うには、まず「どんなファイルを、どんなレイアウトで扱うか」をCOBOLに教える必要があります。この宣言を行うのが、ENVIRONMENT DIVISIONの SELECT と、DATA DIVISIONの FD です。

説明

ファイル処理には、4つのDIVISIONすべてに宣言が必要になります。全体の流れを先に押さえましょう。

flowchart LR
    O[OPEN<br/>ファイルを開く] --> R[READ<br/>1件読む]
    R --> P{処理する}
    P -->|次のレコードへ| R
    P -->|結果を書き出す| W[WRITE<br/>1件書く]
    W --> R
    P -->|AT END:もう読む物がない| C[CLOSE<br/>ファイルを閉じる]

1. ENVIRONMENT DIVISIONでSELECT(ファイルとの結び付け)

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SALES-FILE ASSIGN TO "sales.dat"
               ORGANIZATION IS LINE SEQUENTIAL.
  • SELECT SALES-FILE … プログラムの中で使う論理的なファイル名 SALES-FILE を決める。
  • ASSIGN TO "sales.dat" … 実際のファイル名(OSのファイルパス)と結び付ける。
  • ORGANIZATION IS LINE SEQUENTIAL … ファイルの構成方式。LINE SEQUENTIAL はテキストファイルのように改行区切りで1レコードずつ並ぶ、最も基本的な順編成ファイルを意味します。

2. DATA DIVISIONでFD(レコードのレイアウト)

       DATA DIVISION.
       FILE SECTION.
       FD  SALES-FILE.
       01  SALES-RECORD.
           05  SALES-NAME       PIC X(10).
           05  SALES-AMOUNT     PIC 9(6)V99.

       WORKING-STORAGE SECTION.
       01  WS-EOF-FLAG          PIC X(1)   VALUE "N".
  • FILE SECTION. … ファイルのレコードレイアウトを宣言する専用のセクション(WORKING-STORAGE SECTIONとは別)。
  • FD SALES-FILE.SELECTで決めた SALES-FILEレコードの形を定義する(FD = File Description)。
  • 01 SALES-RECORD. … 1件分のレコードの構造。第3章・第6章で学んだ集団項目の書き方がそのまま使われます。

こうして「SELECTで実ファイルと結び付け、FDでレコードの形を決める」準備が整うと、次のレッスンで見るOPEN・READ・WRITE・CLOSEが使えるようになります。

試すには

「氏名(10文字)」と「金額(6桁+小数2桁)」を持つ EMPLOYEE-RECORD というFDを、自分の手で書き出してみましょう。SELECT文の ASSIGN TO に好きなファイル名を付けてみてください。