導入
ファイルを扱うには、まず「どんなファイルを、どんなレイアウトで扱うか」を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 に好きなファイル名を付けてみてください。