「OPEN/READ/MOVE/IF/WRITE/CLOSE」
(ファイル操作・転送・条件分岐)
●ファイル操作について●
下のサンプルソースを見て下さい。
INPUT-OUTPUT SECTIONの下に
FILE-CONTROLと記述されていますね。
ここで、プログラムで扱うファイル名と外部で扱う
論理ファイル名(注)を関連づけます。
注:「SAMPLE.TXT」のような物理ファイル名の
ことではありません。
ファイルの関連づけは以下のように行います。
SELECT ファイル名 ASSIGN TO 外部ファイル名
サンプルではこの下に
ORGANIZATION IS LINE SEQUENTIAL
と記述されていますが、これはなくても構いません。
長さが不揃いなデータを扱うときなど、改行コードを意識して
1レコードを認識したい場合に使用して下さい。
-----------------------------------------------------
FILE SECTIONにも定義が必要です。
ここでは、使用するファイルのデータ構造を定義します。
FD ファイル名
の下にデータ項目を定義します。
ここではVALUE句は使用できないので注意してください。
●OPEN/CLOSE●
これから使おうとしているファイルの準備処理と後処理です。
OPENしていないファイルに対しては一切の処理を行うことが
できません。また使用したファイルはプログラムが終了するまでに
CLOSEしておかないと、格納されているデータが保証されません。
OPEN INPUT(OUTPUT) ファイル名
で、指定したファイルを読み込み専用(書き込み専用)で開きます。
CLOSE ファイル名
で、指定したファイルを閉じます。一度、閉じたファイルに対して
再度処理を行う場合は再びOPENする必要があります。
●READ/WRITE●
ファイルの読み込みと書き込みです。
READ ファイル名
AT END 処理1
NOT AT END 処理2
で、指定したファイルを読み込みます。
AT END の後の処理1には読み込んだけど
データがなかった場合の処理を記述します。
NOT AT END の後の処理2には、
データがあった場合の処理を記述します。
NOT AT END 句は省略しても構いません。
WRITE 出力ファイルのデータ名 [FROM データ名]
で、指定した出力ファイルのデータをファイルに
書き込みます。FROM 句をつけると指定した
データ名の内容をファイルに書き込むことができます。
●MOVE●
項目転送する命令です。とてもよく使います。
MOVE 転送元データ名 TO 転送先データ名
例えば"PU"という文字をX(文字)属性のNAMEという
データ項目に格納するとしましょう。その場合は、
MOVE "PU" TO NAME となります。
●IF●
条件分岐の命令です。
IF 条件式
THEN 処理1
ELSE 処理2
END-IF
指定した条件式が満たされたときにTHENの処理1を実行し、
条件式に合致しなかった場合はELSEの処理2を実行します。
ELSE句、END-IF句は省略可能です。
ELSE句を省略した場合、条件式が満たされた場合のみ
処理を行い、それ以外は何も処理を行いません。
IF文の終わりは「IFに対応するEND-IF」または
「ピリオド」(ただし、入れ子構造のときにはそこで
処理が終了してしまうので注意が必要です)、
「(入れ子構造の場合)外側のIF文のELSE指定」
のいずれかになります。
●その他●
日本語のような全角文字を使用する場合は、データ項目
の属性をN(全角文字)で定義し、VALUE句には、
N"全角文字"
というように記述します。
---------------------------------------------------
INITIALIZE文で、指定したデータ項目を属性にあった
かたちで初期化することができます。
文字項目にはスペースが、数字項目にはZEROが設定されます。
----------------------------------------------------
同じプログラム内の他のSECTIONを呼び出す場合には
PERFORM を使用します。ちなみに外部プログラムを
呼び出す場合には CALL を使用します。
●サンプルソース●
入力ファイルIN01に”1”が入っていれば「ぷーた」、
”2”が入っていれば「ぷーこ」という名前を
出力ファイルOUT01に書き出すプログラムです。
| 000071****************************************************************** 000072* 000073* COBOL 練習用プログラム 000074* PROGRAM-ID:IF1(OPEN/READ/MOVE/IF/WRITE/CLOSE 練習) 000075* 作成日:2001-02-10 000076* 作成者:プー 000077* 機能概要: 000078* ファイルを読み込み、条件に応じてデータを設定し、出力する。 000079* 000080****************************************************************** 000090 IDENTIFICATION DIVISION. 000100 PROGRAM-ID. IF1. 000110 AUTHOR. PU. 000120 DATE-WRITTEN. 2001.02.10. 000130* 000140 ENVIRONMENT DIVISION. 000150* 000160 INPUT-OUTPUT SECTION. 000170 FILE-CONTROL. 000180 SELECT IN01-F ASSIGN TO IN01 000190 ORGANIZATION IS LINE SEQUENTIAL. 000201 SELECT OUT01-F ASSIGN TO OUT01 000210 ORGANIZATION IS LINE SEQUENTIAL. 000211* 000220 DATA DIVISION. 000230 FILE SECTION. 000240****************************************************************** 000250* 入力ファイル 000260****************************************************************** 000270 FD IN01-F. 000280 01 IN01-R. 000290 03 NAME-CODE PIC X(01). 000400****************************************************************** 000410* 出力ファイル 000420****************************************************************** 000430 FD OUT01-F. 000440 01 OUT01-R. 000450 03 NAME PIC N(03). 000480****************************************************************** 000490* WORK定義 000500****************************************************************** 000510 WORKING-STORAGE SECTION. 000670* 定数項目定義 000671 01 CN-CODE1 PIC X(01) VALUE "1". 000672 01 CN-CODE2 PIC X(01) VALUE "2". 000674 01 CN-NAME1 PIC N(03) VALUE N"ぷーた". 000675 01 CN-NAME2 PIC N(03) VALUE N"ぷーこ". 000678****************************************************************** 000680* メイン処理 000690****************************************************************** 000700 PROCEDURE DIVISION. 000710 MAIN SECTION. 000711 MAIN-STA. 000720* 入出力ファイルのオープン 000721 OPEN INPUT IN01-F. 000723 OPEN OUTPUT OUT01-F. 000724* 出力領域の初期化 000725 INITIALIZE OUT01-R. 000726* 入力ファイルの読込み 000727 PERFORM READ-SYORI. 000728* データ設定 000729 IF NAME-CODE = CN-CODE1 000730 THEN 000731 MOVE CN-NAME1 TO NAME 000732 ELSE 000733 MOVE CN-NAME2 TO NAME 000734 END-IF. 000735* 出力ファイルの書き出し 000736 WRITE OUT01-R. 000737* 入出力ファイルのクローズ 000738 CLOSE IN01-F. 000740 CLOSE OUT01-F. 000741* 終了 000770 MOVE ZERO TO PROGRAM-STATUS. 000790 STOP RUN. 000800 MAIN-END. 000810 EXIT. 001250****************************************************************** 001260* 入力ファイル読み込み処理 001270****************************************************************** 001280 READ-SYORI SECTION. 001290 READ-STA. 001300 READ IN01-F 001310 AT END 001320 DISPLAY "INPUT-DATA NASHI". 001330 NOT AT END 001340 CONTINUE 001350 END-READ. 001360 READ-END. 001370 EXIT. |