前ページへ 手続き部 - ENTER - INVOKE 手続き部 - PERFORM - ROLLBACK 次ページへ

第14章: 手続き部 - MERGE - OPEN

14.1 COBOLの文

14.1.1 MERGE(併合)文

The MERGE(併合)文は、指定されたキーの組に従って同じようにそろえられているいくつかのファイルを、1つのファイルに併合する。そして、併合された順番に従って、出力手続きまたは出力ファイルへレコードを引き渡す。

一般形式

構文規則

  1. ファイル名-1は、 データ部の整列併合ファイル記述項に記述しておく。

  2. 手続き名-1は、出力手続きの名前を表わす。

  3. 手続き名-1および手続き名-2は、節名とする。

    この制約は解除された。

  4. ファイル名-1のファイルに含まれるレコードが可変長である場合、ファイル名-2およびファイル名-3のファイル中に含まれるレコードの大きさは、ファイル名-1のレコードの最小のもの以上かつ最大のもの以下にする。ファイル名-1のファイルに含まれるレコードが固定長である場合、ファイル名-2およびファイル名-3のファイル中に含まれるレコードの大きさは、ファイル名-1のレコードの最大のものを超えてはならない。

  5. ファイル名-2、ファイル名-3、ファイル名-4は、データ部の中の整列併合ファイル記述項にではなく、ファイル記述項に記述しておく。

  6. THRUとTHROUGHは同義語である。

  7. データ名-1はキーのデータ名であり、下記の規則に従う。

    1. キー・データ名で示すデータ項目は、ファイル名-1のレコード中に記述しておく。

    2. キー・データ名は、修飾してもよい。

    3. キー・データ項目は、可変長であってはならない。

    4. ファイル名-1に複数のレコード記述を含める場合、キー・データ名で示すデータ項目は1つのレコード記述の中だけに指定する。1つのレコード記述の中でキー・データ名に指定した文字位置が、そのファイルの他のすべてのレコードのキーとして扱われる。

    5. キー・データ名には、OCCURS句を含む記述項は記述できない。また、OCCURS句を含む記述項の下位に、キー・データ名を属させてはならない。

    6. キー・データ項目は、浮動小数点項目であってもよい。

    7. キー・データ項目が外部浮動小数点数である場合、キーは英数字として扱われる。レコードが併合される順序は、使用する文字の照合順序に左右される。

    8. キー・データ項目が内部浮動小数点数である場合、キーの順序は数値順となる。

  8. MERGE文には、複数ファイル・リール中のファイル名を複数指定してはならない。

  9. MERGE文の中でファイル名を繰り返し指定してはならない。

  10. MERGE文は、手続き部の宣言部分以外のどこにでも置くことができる。

  11. ファイル名-4が索引ファイルである場合、最初のデータ名-1には ASCENDINGを指定する。また、データ名-1がレコード上で占める文字位置は、そのファイルの主レコードキーと同じにする。

  12. GIVING を指定し、その対象であるファイル名-4のファイルに含まれるレコードが 可変長である場合、ファイル名-1のファイル中に含まれるレコードの大きさは、ファイル名-4のレコードの最小のもの以上かつ最大のもの以下にする。ファイル名-4のファイルに含まれるレコードが固定長である場合、ファイル名-1のファイル中に含まれるレコードの大きさは、ファイル名-4のレコードの最大のものを超えてはならない。

  13. USING句またはGIVING句に10個以上のファイル名を指定したい場合には、コンパイラ指令のCALLSORT"EXTSM"を使用しなければならない。そうすると、255個までのファイルを指定できるようになる。

一般規則

  1. MERGE文は、ファイル名-2およびファイル名-3のファイルに含まれるすべてのレコードを併合する。

  2. ファイル名-1のファイルに含まれるレコードが 固定長である場合、ファイル名-2またはファイル名-3のファイル中にファイル名-1の固定長レコードよりも短いものがあると、ファイル名-2またはファイル名-3のレコードがファイル名-1のファイルに引き渡されるときに、その後部に空白が埋められる。

  3. 語KEYの後ろに続くデータ名は、KEY指定での区切り方とは関係なく、強さの順に左から右に並べる。つまり、一番左のデータ名が最も強いキーであり、その右のデータ名が次に強いキーである、といった具合いである。

    1. ASCENDING を指定した場合、比較の規則に従って、キー・データ項目の内容の値の小さい方から大きい方へと、順に併合される。

    2. DESCENDINGを指定した場合、比較の規則に従って、キー・データ項目の内容の値の大きい方から小さい方へと、順に併合される。

  4. 比較の規則に従って、あるデータレコードのすべてのキー・データ項目の内容が、他のいくつかのデータレコードの対応するキー・データ項目と等しい場合、引き取りの順序は下記のようになる。

    1. MERGE文に指定した入力ファイルの順。

    2. 1つの入力ファイル内にキー・データ項目の値が等しいレコードが複数ある場合は、それらがすべて他の入力ファイルからよりも先に引き取られる。

  5. 文字のキー・データ項目の比較に適用される文字の照合順序は、 MERGE文の実行開始時に、下記の優先順序で決定される。

    1. 最初は、指定してあれば、MERGE文中の COLLATING SEQUENCEに指定した文字の照合順序。

    2. 次は、プログラム用に設定してある文字の照合順序。

  6. ファイル名-2およびファイル名-3のファイル中のレコードが、MERGE文中に指定した ASCENDING KEYまたは DESCENDING KEYの順に整列されていないと、併合処理の結果はどうなるかわからない。

  7. ファイル名-2およびファイル名-3のファイル中のすべてのレコードが、ファイル名-1のファイルに引き渡される。MERGE文の実行開始時にファイル名-2およびファイル名-3のファイルが開かれていてはならない。MERGE文を実行すると、ファイル名-2およびファイル名-3の各ファイルに対して、下記の操作が行われる。

    1. ファイルの処理が開始される。これはINPUT指定をしたOPEN文を、暗黙的に実行することである。出力手続きを指定すると、この開始処理は出力手続きに制御が移される前に行われる。

    2. 論理レコードが読み込まれて、併合操作に引き渡される。これはNEXTおよびAT ENDを指定したREAD文を、暗黙的に実行することである。

      ファイル名-1のファイルのレコードが可変長であると、ファイル名-1のファイルに書き出されるレコードの大きさは、ファイル名-2またはファイル名-3から読み込んだときのレコードの大きさとなる。このことは、ファイル名-1のファイルの整列併合ファイル記述項に指定した、RECORD IS VARYING句またはOCCURS句のDEPENDING ON指定の対象となっているデータ項目の内容にかかわらず適用される。

      相対ファイルに関しては、相対キー・データ項目の内容がMERGE文の実行後にどうなっているかはわからない。

    3. ファイルの処理が終了される。これは任意指定の何もないCLOSE文を暗黙的に実行することである。出力手続きを指定した場合は、その中の最後の文に制御が移されるまで、この終了処理は実行されない。

      USE AFTER EXCEPTION/ERROR手続きを指定してあれば、この暗黙のCLOSE処理において、それも対象となる。

      ファイル名-2またはファイル名-3のファイル記述項中に指定した、RECORD IS VARYING句のDEPENDING ON指定の対象となっているデータ項目の内容は、 MERGE MERGE文の完了時点でどのようになっているかわからない。

  8. 出力手続きには、RETURN(引き取り)文を用いてファイル名-1のファイルから順に1件ずつ引き取った併合済みレコードを、選択したり変更したり複写したりする任意の必要な手続きを組み込むことができる。この出力手続きの範囲には、その中からCALL文、EXIT文、GO TO文、PERFORM文によって制御を移された結果実行される、すべての文が含まれる。また、この出力手続きの範囲内の文を実行した結果として実行される宣言手続き中のすべての文も、この出力手続きの範囲に含まれる。この出力手続きの範囲内で、MERGE文、RELEASE文、SORT文を起動するようなことがあってはならない。(COBOL言語の概念の章の明示指定と暗黙指定の節を参照。)

  9. 出力手続きを指定すると、MERGE文の実行中にその手続きに制御が渡される。コンパイラは出力手続きの最後の文の末尾に復帰機構を組み込む。出力手続きの最後の文に制御が移されると、復帰機構によってMERGE文の処理が終了されて、MERGE文の後ろの次の実行可能文に制御が移される。出力手続きに制御が移される前に、併合処理は、要求されれば併合された次の順序のレコードを引き渡せる状態に達している。出力手続き中のRETURN文は、そのレコードを引き取るための要求である。

  10. 出力手続きの実行中に、ファイル名-2、ファイル名-3、ファイル名-4のファイルを操作したり、そのレコード領域にアクセスしたりする文を実行することはできない。

  11. GIVINGを指定すると、暗黙の出力手続きによって、併合されたすべてのレコードはファイル名-4のファイルに書き出される。MERGE文の開始時点で、ファイル名-4のファイルが開かれていてはならない。 MERGE文を実行すると、ファイル名-4の各ファイルに対して、下記の処理が行われる。

    1. ファイルの処理が開始される。これはOUTPUT指定をしたOPEN文を、暗黙的に実行することである。

    2. 論理レコードが引き取られてファイルに書き出される。これは任意指定を何も含まないWRITE文を、暗黙的に実行することである。

      ファイル名-4のファイルのレコードが可変長であると、ファイル名-4のファイルに書き出されるレコードの大きさは、ファイル名-1から読み込んだときのレコードの大きさとなる。このことは、ファイル名-4のファイルの整列併合ファイル記述項に指定した、RECORD IS VARYING句またはOCCURS句のDEPENDING ON指定の対象となっているデータ項目の内容にかかわらず適用される。

      相対ファイルに関しては、相対キー・データ項目の値は、最初のレコードが引き取られたときは"1" 、2番目のレコードが引き取られたときは"2" という具合いに設定される。MERGE文の実行が終了した後で、相対キー・データ項目の内容がどうなっているかはわからない。

    3. ファイルの処理が終了される。これは任意指定の何もないCLOSE文を、暗黙的に実行することである。

      USE AFTER EXCEPTION/ERROR手続きを指定してあれば、上記の暗黙の処理において、それも対象となる。しかし、そのUSE手続きの中から、ファイル名-4のファイルを操作したりそのレコード領域をアクセスしたりするような文が実行されるようなことがあってはならない。外部的に定義されているファイルの境界を超えて最初にレコードが書き出されると、そのファイルに指定してあるUSE AFTER EXCEPTION/ERROR手続きが実行される。そのUSE手続きから制御が戻されたとき、またはそのようなUSE手続きが指定されていないときは、上記の11cと同様にファイルの処理が終了される。

      ファイル名-1のファイル記述項中に指定した、RECORD IS VARYING句のDEPENDING ON指定の対象となっているデータ項目の内容は、GIVINGを指定したMERGE文が完了した時点でどのようになっているかはわからない。

  12. ファイル名-4のファイルに含まれるレコードが固定長である場合、ファイル名-1のファイル中にファイル名-4の固定長レコードよりも短いものがあると、ファイル名-4のファイルにレコードが引き渡されるときに、その後部に空白が埋められる。

  13. 言語リファレンス - 追加トピック中の区分化の章に示すように、 MERGE文を含むプログラムを区分化できる。ただし、下記の制限がある。

    1. 独立区分ではない区分中の節内にMERGE文が存在する場合、そのMERGE文から呼び出される出力手続きは、下記のどちらかの状態で組み込まれていなければならない。

      1. 非独立区分中に完全に含まれる。

      2. 単一の独立区分中に完全に含まれる。

    2. 独立区分中にMERGE文が存在する場合、そのMERGE文から呼び出される出力手続きは、下記のどちらかの状態で組み込まれていなければならない。

      1. 非独立区分中に完全に含まれる。

      2. MERGE文と同じ独立区分中に完全に含まれる。

  14. 特殊レジスタの SORT-RETURN が MERGE文の原始要素に対して用意されている。 この特殊レジスタには、併合処理が終わったときに0(正常終了)または16(不成功)が設定される。出力手続きの中でこの特殊レジスタに値16を設定して、途中で併合処理を終わらせることができる。この場合、併合処理は次のRETURN文のところで終了される。

14.1.2 MOVE(転記)文

MOVE(転記)文は、編集規則に従って、データをいくつかのデータ領域に移す。

一般形式

書き方 1

書き方 2

指令

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。

構文規則

すべての書き方
  1. 一意名-1および定数は送出し側を表わし、一意名-2は受取り側を表わす。

  2. 指標データ項目、

    ポインタ・データ項目、手続きポインタ項目

    は、MOVE文の作用対象にすることはできない。(前述のUSAGE句を参照。)

  3. 送出し側項目か受取り側項目のどちらか一方が2バイト文字(USAGE DISPLAY-1)である場合には、両方とも2バイト文字でなければならない。表意定数のSPACEは、2バイト文字の送出し側として使用できる。
書き方 1
  1. 書き方1では、すべての一意名は集団項目でも基本項目でもよい。送出し側のデータが、各一意名-2のデータ項目へ指定された順番に転記される。

  2. 一意名-1には数字の関数一意名を指定できる。

書き方 2
  1. CORRは、CORRESPONDINGの省略形である。

  2. CORRESPONDING指定を書くときは、すべての一意名は集団項目とする。

  3. MOVE CORRESPONDING文中の集団項目内に、ポインタ・データ項目が含まれていてもよい。しかし、ポインタ・データの転記はいっさい行われない。

一般規則

すべての書き方
  1. 一意名-1が数字の関数一意名であるときは、一意名-2は数字項目か数字編集項目のどちらかでなければならない。

  2. 定数または一意名-1によって指定されるデータが、一意名-2によって指定される各データ項目に指定された順番で転記される。一意名-2に関する規則は、他の受取り側にも適用される。一意名-2が添字付けまたは指標付けされていると、そのデータ項目に転記が行われる直前に添字または指標が評価される。

    一意名-1が部分参照されているか、添字付けされているか、あるいは関数一意名である場合、その部分参照、添字、関数一意名の評価は、受取り側の最初のデータに転記が行われる直前に、1回だけ行われる。

    下記の文は

         MOVE a(b) TO b, c(b)

    下記の3つの文に相当する。

         MOVE a(b) TO temp
         MOVE temp TO b
         MOVE temp TO c(b)

    ここで、temp は中間結果を保持する項目であり、COBOLコンパイラによって用意される。

  3. 送出し側項目も受取り側項目も基本項目であるMOVEを、基本項目転記という。各基本項目は次の項類のどれかに属する。具体的には、数字、英字、英数字、数字編集、英数字編集、

    浮動小数点数のどれかに属する。

    これらの項類はPICTURE句に説明してある。数字定数は、数字の項類に属する。文字定数は、英数字の項類に属する。表意定数のZEROは、数字項目または数字編集項目に転記される場合は数字の項類に属し、それ以外の場合には英数字の項類に属する。表意定数のSPACEは、英数字の項類に属する。その他の表意定数は、すべて英数字の項類に属する。

    これらの項類の間の基本項目転記に関して、下記の規則が適用される。

    1.  

      1. 表意定数のSPACE、英数字編集、英字のデータ項目を、数字または数字編集のデータ項目に転記してはならない。

      2. 数字編集のデータ項目を、数字または数字編集のデータ項目に転記してはならない。

        この制限は撤廃された。

    2. 数字定数、表意定数のZERO、数字データ項目、数字編集データ項目を、英数字データ項目に転記してはならない。

    3. 整数でない数字定数または整数でない数字データ項目を、英数字または英数字編集のデータ項目に転記してはならない。

    4. 上記以外の基本項目転記は文法的に正しく、下記の一般規則5に示す規則に従って実行される。

  4. 文法的に正しい基本項目転記が実行されるときには、ある形式の内部表現から別の形式の内部表現へのデータの変換が、必要に応じて行われる。また、受取り側データ項目に指定されている編集

    または暗黙的に示されている逆編集

    もあわせて行われる。

    1. 受取り側が英数字編集または英数字のデータ項目である場合、COBOL言語の概念の章の標準桁寄せ規則に定義されているように、桁寄せと必要な空白の穴埋めが行われる。送出し側の項目の大きさの方が、受取り側の項目の大きさよりも大きい場には、受取り側の項目がいっぱいになった後で、右側の過剰な文字が切り捨てられる。送出し側の項目が符号付きの数字である場合、演算符号は転記されない。演算符号が独立の文字位置を占める(前述のSIGN句を参照) 場合、演算符号は転記されず、送出し側の項目は実際の大きさよりも1文字小さいものとして扱われる(標準データ形式として)。

    2. 受取り側が数字または数字編集のデータ項目である場合、COBOL言語の概念の章の標準桁寄せ規則に定義されているように、桁寄せと必要なゼロの穴埋めが行われる。ただし、ゼロを置き換える編集が行われている場合は例外である。

      送出し側の項目の項類が数字編集である場合、その項目の編集されていない値を取り出すために、暗黙の 逆編集が行われる。逆編集された値には、符号が付くことがある。次いで、編集されていない値が受取り側の項目に転記される。逆編集の効果は、DE-EDIT指令の影響を受ける。

      >受取り側の項目が符号付きの数字である場合、送出し側の符号は受取り側項目に転記される。(前述のSIGN句を参照。) 必要に応じて、符号の表現形式の変換が行われる。送出し側の項目に符号が付いていない場合には、受取り側項目用に正符号が付加される。

      受取り側の項目が符号なしの数字である場合、送出し側の項目の絶対値が受取り側の項目に転記され、符号は付けられない。

      送出し側の項目の項類が英数字である場合、送出し側の項目が符号なしの整数として記述されているように、データが転記される。

      受取り側の項目が数字または数字編集であり送出し側の項目が英数字である場合、送出し側の項目の内容が整数でないと、結果はどうなるかわからない。送出し側の英数字項目が整数でない場合は、エラーが報告されて、ゼロがその対象に転記される。(前述の矛盾するデータを参照。)

      送出し側の項目が数字である場合、転記し戻すと数字編集項目に同じ値が現れるように転記操作が行われる(ただし、切捨てが発生した場合は除く)。このデータ項目に編集文字列に適合しないデータが含まれる場合、受取り側にはゼロが転記される。

    3. 受取り側の項目が英字である場合、COBOL言語の概念の章の標準桁寄せ規則の節に定義されているように、桁寄せと必要な空白の穴埋めが行われる。送出し側の項目の大きさの方が受取り側の項目の大きさよりも大きい場合には、受取り側の項目がいっぱいになった後で、右側の過剰な文字が切り捨てられる。

    4. 受取り側の項目が浮動小数点数である場合、送出し側の項目がまず最初に内部浮動小数点数に変換され、それから転記される。外部浮動小数点数項目へ、または外部浮動小数点数項目からデータを転記する場合は、該当データはいったん内部浮動小数点数に変換される。

    5. 受取り側の項目が2バイト文字である場合、送出し側の項目も2バイト文字でなければならない。送出し側の項目の大きさと受取り側の項目の大きさが異なる場合は、送出し側の項目の右側が切り捨てられるか、受取り側の項目の右側に2バイト文字の空白が埋められるかする。

  5. 基本項目転記以外の転記は、英数字の基本項目同士の転記とまったく同じように扱われる。ただし、データの内部表現形式の変換は行われない。この形の転記においては、送出し側または受取り側の項目の下位に属する個々の基本項目または集団項目を考慮することなく、受取り側の項目にデータが詰め込まれる。ただし、OCCURS句の一般規則に述べたことは例外である。

  6. 表 14-1 に、各種のMOVE文の適合性をまとめて示す。表の中に示した一般規則の参照番号は、該当事項を禁止または裏付けている規則を示す。

書き方 2
  1. CORRESPONDING指定を書くと、一意名-1に属する該当する項目が、一意名-2に属する対応する項目に転記される。これに適用される規則については、前述の CORRESPONDING 指定に説明してある。CORRESPONDING指定が含まれるMOVE文を実行することは、対応する一意名の間で個々に転記を行う MOVE文を実行することに等しい。

    この処理は、各宛先集団ごとに繰り返される。

    表 14-1: MOVE文のデータ・カテゴリ

    送出し側のデータ項目の項類 受取り側のデータ項目の項類1
    英字 英数字/英数字編集 数字(整数/非整数) 数字編集外部/内部浮動小数点数 2バイト文字
    英字 Yes/4c Yes/4a No/3a No/3a No/4e
    英数字 Yes/4c Yes/4a Yes/4b2 Yes/4b No/4e
    英数字編集 Yes/4c Yes/4a No/3a No/3a No/4e
    数字:整数 No/3b Yes/4a Yes/4b Yes/4b No/4e
    数字:非整数 No/3b No/3c Yes/4b Yes/4b No/4e
    数字編集 No/3b Yes/4a Yes/4b Yes/4b No/4e
    2バイト文字 No/4e No/4e No/4e No/4e Yes/4e

    1. 各欄に該当する一般規則の番号を示す。
    2. 非整数の英数字定数が送出し側として使用された場合、エラーとなる。

14.1.3 MULTIPLY(乗算)文

MULTIPLY(乗算)文は、数字データ項目どうしを掛け合わせて、その結果をいくつかのデータ項目に入れる。

一般形式

書き方 1

書き方 2

構文規則

すべての書き方
  1. 各一意名は、数字基本項目を指さなければならない。ただし、書き方2の語GIVINGに続く各一意名は、基本数字項目の他に基本数字編集項目であってもよい。

  2. 各定数は、数字定数とする。

  3. 作用対象を合成したものは、 18桁を超えてはならない。ここで、作用対象の合成とは、すべての受取り側のデータ項目の小数点の位置をそろえて重ね合わせることによって得られる、仮想のデータ項目である。

  4. 数字データ項目または数字定数を指定できるところでは、どこでも浮動小数点数データ項目および浮動小数点数定数を使用できる。

一般規則

すべての書き方
  1. 前述のROUNDED指定ON SIZE ERROR指定算術文作用対象の重なり算術文における複数個の答えの各節を参照。
書き方 1
  1. 書き方1では、一意名-1または定数-1の値に一意名-2の値が掛けられる。乗数(一意名-2)の値は、積によって置き換えられる。同様に、一意名-2の後続の値に対して、左から右に同じ処理が繰り返される。
書き方 2
  1. 書き方2では、一意名-1または定数-1の値に一意名-2または定数-2の値が掛けられる。結果は、各一意名-3のデータ項目に入れられる。

14.1.4 NEXT SENTENCE(次の完結文)文

NEXT SENTENCE(次の完結文)文は、制御を次のCOBOL完結文に移す。つまり、次の終止符(.)に続く完結文に制御を移す。これに対し、 動詞CONTINUEは、論理的に次のCOBOLの動詞に制御を移す。

一般形式

構文規則

  1. 条件文または無条件文を書けるところには、どこでもNEXT SENTENCEを使用できる。

一般規則

  1. NEXT SENTENCE文は、次の終止符(.)に続く、論理的に次となるCOBOLの動詞に、 実行の流れを変えさせる。

14.1.5 NOTE(注記)文

NOTE(注記)文は、完結文または段落を注記として扱う。

一般形式

構文規則

  1. 文字列には、計算機の文字集合に属する文字を自由に組み合わせて書ける。

一般規則

  1. 段落の最初の完結文がNOTE文であると、その段落全体が注記として扱われる。

  2. 段落の冒頭以外の場所にNOTE文を置くと、次の分離符である終止符(.)が出てくるまでのテキストが注記として扱われる。

14.1.6 ON(回数間隔)文

ON(回数間隔)文は、手続き文を周期的に実行できるようにする。

一般形式

構文規則

  1. 一意名-1、一意名-2、一意名-3は、符号なしの整数の基本項目とする。

  2. 定数-1、定数-2、定数-3は、符号なしの数字定数とする。

一般規則

  1. 各ON文が最初に実行される前に、 そのON文用に暗黙的に定義されたカウンタ(暗黙の ONカウンタ)がゼロに初期化される。

  2. 指定する一意名-1、一意名-2、一意名-3は、ON文が実行されるときには、正の整数値をとらなければならない。次にON文を実行するまでの間に、これらの値を変更すると、以降のON文の実行に影響が出る。

  3. 暗黙のONカウンタの内容は、 実行の流れをそのON文に移さないかぎり、変更されることはない。(呼ばれたプログラムのONカウンタを設定し直すには、そのプログラムを取り消すしかない。EXIT PROGRAM文を実行し、その後そのプログラムを再び呼び出した場合、CANCEL文をはさんでいなければONカウンタの値は元のままである。)

  4. 下記の値リストが評価される。

    1. 一意名-1または定数-1の現在の値

    2. 一意名-1または定数-1の現在の値に、一意名-2または定数-2の現在の値を繰り返し加えた一連の値。この繰り返しは、一意名-1または定数-1の現在の値が、一意名-3または定数-3の値に達するまで行われる。

    次いで、暗黙のONカウンタが上記の一連の値と比較される。一連の値の中にONカウンタと一致するものがあれば、無条件文-1が実行される。そうでなければ、無条件文-2が実行される。

14.1.7 OPEN(開く)文

The OPEN(開く)文は、ファイルの処理を行うための準備(ファイルのオープン)をする。また、見出しの確認や書込み、その他の入出力操作を行う。

OPEN文のREVERSED指定は、ANSI '85標準では廃要素に分類されており、ANSI標準の次回の全面改訂の際に、削除される予定である。

この構文は、Micro Focus COBOLに組み込まれているすべての方言で全面的に使用できる。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、OPEN文の REVERSED指定は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの文を使用するべきではない。

一般形式

書き方 1 (レコード順ファイル)

書き方 2 (行順ファイル、相対ファイル、索引ファイル)

SHARING句の部分:

構文規則

すべての書き方 (すべてのファイル)
  1. OPEN文が対象とするファイルは、編成または呼出し法が同じである必要はない。

  2. SHARING ALLを指定してINPUT指定を書かない場合、ファイル名-1のファイル管理記述項にLOCK MODE句を指定しなければならない。

書き方 1 (レコード順ファイル)
  1. NO REWINDは注記になる。

  2. The I/ O 指定は、 ディスク・ファイルに対してだけ適用できる。

  3. EXTEND指定は、LINAGE句を指定していないファイルに対してだけ適用できる。

  4. 複数ファイル・リールに対しては、EXTENDを指定できない。

書き方 2 (
dialm.gif行順ファイル、
相対ファイル、索引ファイル)
  1. 順呼出し法のファイルに対して、EXTENDを指定できる。

  2. 行順編成のファイルにはSHARING指定を書いてはならない。

一般規則

すべての書き方 (すべてのファイル)
  1. OPEN文が正常に実行され終わるまで、該当するファイルを明示的または暗黙的に対象とするどのような文も実行することはできない(USINGまたはGIVINGを指定したSORT文およびMERGE文は例外である)。

  2. OPEN文が正常に実行されると、ファイルの利用可能性が判定され、ファイル名によって参照されるファイル結合子がOPEN文のモードの状態に置かれる。そして、ファイル結合子を通じて、ファイルがファイル名と関係づけられる。

    必要語のINPUT, OUTPUT, I-O, およびEXTENDを用いて、ファイル結合子を通じてファイルに適用する入出力操作を指定し、OPEN文のモードを確立する。(表14-4「文とOPENモードの許される組合せ」を参照。)

    ファイルが物理的に存在し、ファイル処理システムに認識されていれば、そのファイルは利用可能である。表14-2「(現在は開かれていない)利用可能なファイルと利用不可能なファイルを開く処理」に現在は開かれていない利用可能なファイルと利用不可能なファイルを開いたときの結果を示す。表14-3「現在は他のファイル結合子によって開かれている利用可能な共有ファイルを開く処理」に現在は他のファイル結合子によって開かれている利用可能なファイルと利用不可能なファイルを開いたときの結果を示す。

    14-2:(現在は開かれていない)利用可能なファイルと利用不可能なファイルを開く処理

    OPEN文のモード ファイルは利用可能 ファイルは利用不可能
    INPUT 正常に開ける 開けない
    INPUT (不定ファイル) 正常に開ける。 正常に開ける最初に読んだときに、ファイル終了条件または無効キー条件が発生する。
    I-O 正常に開ける 開けない
    I-O (不定ファイル) 正常に開ける 開くとファイルが作成される
    OUTPUT 正常に開ける;中身は空 開くとファイルが作成される
    EXTEND 正常に開ける 開けない
    EXTEND(不定ファイル) 正常に開ける 開くとファイルが作成される

    表14-3:現在は他のファイル結合子によって開かれている利用可能な共有ファイルを開く処理







    開く要求
    共有の度合いとOPEN文のモード
    他と共有せず 読出しのみ共有 他のすべてと共有
    拡張
    I-O
    入力
    出力
    拡張
    I-O
    出力
    入力 拡張
    I-O
    出力
    入力
    SHARING WITH NO OTHER EXTEND
    I-O
    INPUT
    OUTPUT
    開けない 開けない 開けない 開けない 開けない
    SHARING WITH READ ONLY EXTEND
    I-O
    開けない 開けない 開けない 開けない 正常に開ける
    INPUT 開けない 開けない 正常に開ける 開けない 正常に開ける
    OUTPUT 開けない 開けない 開けない 開けない 開けない
    SHARING WITH ALL OTHER EXTEND
    I-O
    開けない 開けない 開けない 正常に開ける 正常に開ける
    INPUT 開けない 正常に開ける 正常に開ける 正常に開ける 正常に開ける
    OUTPUT 開けない 開けない 開けない 開けない 開けない

  3. OPEN文の実行が正常に終了すると、対象となったファイルのレコード領域が利用可能となる。

  4. 表14-4において、行と列の交差する格子内の"0"は、該当の行のアクセス・モードでの入出力モードの指定を、列の上部に示されているOPEN文のモードに適用できることを示す。

    表14-4: 有効な入出力文

    呼出し法 OPEN文のモード
    INPUT OUTPUT INPUT-OUTPUT EXTEND
    順呼出し READ O   O  
    WRITE   O   O
    REWRITE     O  
    乱呼出し(非順編成ファイル) READ O   O  
    WRITE   O O  
    REWRITE     O  
    START        
    DELETE     O  
    動的呼出し(非順編成ファイル) READ O   O  
    WRITE   O O  
    REWRITE     O  
    START O   O  
    DELETE     O  


    注: START文とDELETE文は、レコード順ファイル

    または行順ファイル

    には適用できない。


  5. If the WITH LOCKを指定すると、OPEN文は該当するファイル全体に対して ロックする。(これは、そのファイルのSELECT文の中にLOCK MODE IS EXCLUSIVEを指定することに等しい。前述のSELECT文の節を参照。)

  6. OPEN文の実行中にファイル属性の間に矛盾が検出されると、そのOPEN文の実行は不成功となる。OPEN文の実行中にどの ファイル固有属性が妥当性を検査されるかは、COBOLシステムごとに定義されている。詳細については、ファイルの取扱いに関する説明書を参照。ファイルの編成や記憶媒体によって、どのファイル固有属性が妥当性を検査されるかは変わってくる。

  7. 同じ実行単位の中で1つのファイルを開くのに、INPUT, OUTPUT, EXTEND, I-Oのどのモードでも指定できる。 ファイル結合子に関して最初にOPEN文を実行した後では、そのファイル結合子に関してCLOSE文を実行してからでないと、同じファイル結合子に関して再びOPEN文を実行することはできない。対象のファイルが不定ファイルであっても、この規則は当てはまる。

  8. OPEN文を実行しても、最初のデータレコードは入手も解放もされない。

  9. SELECT句中で指定したファイルの外部名は、下記のように処理される。

    1. INPUTを指定した場合、OPEN文を実行すると、入力ファイルを開くためのオペレーティングシステムの規則に従って、割り当てられた名前が検査される。

    2. OUTPUTを指定した場合、OPEN文を実行すると、出力ファイルを開くためのオペレーティングシステムの規則に従って、割り当てられた名前が書き出される。

  10. ファイル名-1、ファイル名-2、ファイル名-3、ファイル名-4のファイル記述項は、そのファイルを作成したときと同じにする。

  11. INPUTまたは I/O を指定して開いたファイルに関して、OPEN文は ファイル位置指示子を設定する。その値は、索引ファイルと順ファイルに関してはファイル内に現存する最初のレコードとされ、相対ファイルに関してはレコード番号1とされる。ファイル中にレコードが存在しないと、索引データまたは順ファイルが次に読まれたときに ファイル終了条件が発生するように、ファイル位置指示子が設定される。ファイルそのものが存在しないと、OPEN INPUT文は誤り状態となる。

  12. I-Oを指定して開いたファイルの LABEL RECORD句に、 ラベル・レコードがあると指定されていると、OPEN文の実行に下記の処理が含められる。

    1. 入出力両用ファイルのラベルの検査に関するオペレーティングシステムの規則に従って、ラベルが検査される。

    2. 入出力両用ファイルのラベルの書出しに関するオペレーティングシステムの規則に従って、ラベルが書き出される。

  13. OUTPUTを指定したOPEN文の実行が正常に終了すると、ファイルが作成される。その時点では、そのファイルにはまだレコードは含まれていない。同じ名前のファイルが存在すると、そのファイルは削除される。そのファイルが書き込み保護されていると、誤りが発生する。

  14. EXTEND を指定すると、 OPEN文はファイルへの次の書き出し位置を、そのファイルの 最後の論理レコードの直後に位置付ける。順ファイルの場合、最後の論理レコードは最後にファイルに書き出されたレコードである。相対ファイルの場合、最後の論理レコードは現存するレコードの中で相対レコード番号が最も大きいものである。索引ファイルの場合、最後の論理レコードは現存するレコードの中で主レコードキーの値が最も大きいものである。

  15. OPEN文を実行すると、 FILE STATUSデータ項目の値が更新される。(前述の入出力状態の節を参照。)

  16. 該当するファイルのSELECT/ASSIGN文の中で LOCK MODE IS を指定してあると、OPEN文の実行が正常に終了したときに、ファイルはその実行単位用に排他的に ロックされる。

  17. 該当するファイルのSELECT/ASSIGN文の中で LOCK MODE IS AUTOMATICまたは LOCK MODE IS MANUALを指定してあると、OPEN文の実行が正常に終了したときに、ファイルは共有可能とされる。共有可能なファイルは、複数の実行単位から正常に開くことができる。

  18. OUTPUT用に開いたファイルおよびEXTEND用に開いた相対および索引ファイルは、暗黙的に 排他的にロックされたものと定義される。したがって、そのファイルは共有できない。

  19. I-O用に開いた共有ファイルについてだけ、 レコードロックを得ることができる。

  20. OPEN文の実行が不成功に終わると、物理ファイルは影響を受けず、下記の処理が順に行われる。

    1. 該当するファイルに対応する入出力状態に、OPEN文の実行が不成功に終わった理由を示す値が設定される。

    2. 実行すべき条件に該当するUSE AFTER EXCEPTION手続きがあれば、それが実行される。(前述のUSE文を参照。)

  21. I-Oを指定してファイルを開くと、そのファイルには入力操作も出力操作も加えることができる。ファイルが存在しないときは、下記の規則が適用される。

    1. OPTIONALを指定してあれば、ファイルが作成される。

    2. NOT OPTIONALを指定してあれば、誤りが発生する。

    3. どちらの句も指定しないで、 OPTIONAL-FILE 指令を原始要素のコンパイル時に指定してあれば、ファイルが作成される。

    4. どちらの句も指定しないで、NOOPTIONAL-FILE指令を原始要素のコンパイル時に指定してあれば、誤りが発生する。

  22. 入力ファイルのSELECT句に OPTIONAL指定をしていると、ファイルのオープン時に そのファイルの有無を尋ねてくる。そのファイルが存在しないと、最初にREAD文を実行したときに、ファイル終了条件が発生する。

  23. EXTENDを指定すると、 OPEN文はファイルへの次の書き出し位置を、そのファイルの最後の論理レコードの直後に位置付ける。以降、そのファイルを対象にWRITE文を実行すると、OUTPUTを指定したかのように、レコードがそのファイルに追加される。ファイルが存在しない場合は、作成される。

  24. EXTENDを指定したファイルのファイル記述項に LABEL RECORDS句が指定してあると、OPEN文の実行に下記の処理も含められる。

    1. 単一リール/ユニット・ファイルの場合だけ、開始ファイル・ラベルが処理される。

    2. 最後に存在するリール/ユニット上の開始リール/ユニット・ラベルは、そのファイルを INPUTを指定して開いたかのように処理される。

    3. 既存の終了ラベルは、そのファイルをINPUTを指定して開いたかのように処理される。その後で、終了ラベルは削除される。

    4. その後、そのファイルをOUTPUTを指定して開いたかのように処理が続行される。

  25. I /Oを指定すると、 ファイルを入力と出力の両方の処理用に開ける。

    ただし、 ORGANIZATION LINE SEQUENTIALのファイルを除く。

    該当のファイルが存在しない場合には、そのファイルが作成されて、入力用には空のファイルとして使用される。

    ただし、SELECT文にNOT OPTIONALが指定された場合は別である。

    作成されたばかりのファイルから読込みを行うと、エラーとなる。

  26. SHARING指定は共有ファイルに対してのみ指定できる(共有 モードを参照)。

  27. SHARING指定は、ファイルを共有しているファイル結合子を通じて、対象のファイルにどのような処理を行えるかを示す(共有 モードを参照)。

  28. ファイル名に関連するファイル結合子のファイル管理記述項に記述されているSHARING指定よりも、このSHARING指定が優先する。OPEN文にSHARINGが指定されていない場合、ファイルの共有はファイル管理記述項によって全面的に指定される。OPEN文にSHARING指定がなく、ファイル管理記述項にもSHARING句が指定されていない場合、該当のファイル結合子に関する共有モードは Sharingモードに応じて設定される。

書き方 1 (レコード順ファイル)
  1. ファイルの記憶媒体が巻き戻し可能なものであるときは、下記の規則が適用される。

    1. OPEN文を実行すると、ファイルの先頭に現在位置が位置付けられる。

    2. REVERSED指定があるときは、OPEN文を実行すると、ファイルの末尾に現在位置が位置付けられる。

  2. REVERSED指定があるときは、そのファイルに対して以降READ文を実行すると、データは逆の順に、つまり 最後のレコードから開始して、読み込まれる。

書き方 2 (行順ファイル)
  1. 行順ファイルに対しては、I-Oモードを適用することはできない。ただし、 REWRITE-LS 指令を設定した場合は、 そのかぎりではない。


Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名は国際法によって保護されています。
前ページへ 手続き部 - ENTER - INVOKE 手続き部 - PERFORM - ROLLBACK 次ページへ