COBOL基本文法2

「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.

プログラミング入門に戻る