Previous 手続き部 - PERFORM - ROLLBACK オブジェクトCOBOL言語拡張 Next

第 16 章 : 手続き部 - SEARCH - XML PARSE

16.1 SEARCH(表引き)文

SEARCH(表引き)文は、 表を検索して、指定された条件を満足する表要素を探し出し、対応する指標名がその表要素を指すようにするために使用する。

一般形式

形式 1

形式 2

比較文字の"=" は必須であるが、他の記号と混同することを避けるために、下線を引いていないことに注意。

構文規則

すべての形式 (すべてのファイル)
  1. 一意名-1には添字または指標を付けてはならない。このデータ記述には、 OCCURS句およびINDEXED BY BY句が含まれていなければならない。形式 2 では、一意名-1のデータ記述のOCCURS句内に、KEY IS指定も含まれていなければならない。

  2. 一意名-2を指定する場合、指標データ項目(USAGE IS INDEX)または想定される小数点の右に何もない整数データ項目とする。

  3. END-SEARCH指定を書いた場合、NEXT SENTENCE指定を書いてはならない。

    END-SEARCH指定とNEXT SENTENCE指定を同時に書いてもよい。NEXT SENTENCE指定が実行されると、制御はEND-SEARCH指定の後ろに続く次の文に移されるのではなく、最も近い終止符(.)の後ろの文に移される。

  4. 無条件文-1および無条件文-2の代わりに、条件文を使用してもよい。
形式 1
  1. 条件文-1、条件文-2 などには、手続き部の章の条件式節で説明した任意の条件を書くことができる。

  2. 一意名-1(つまり表引きの対象とする表要素)は、内部浮動小数点数項目または外部浮動小数点数項目であってもよい。
形式 2
  1. 使用する条件名は、すべて単一の値をもつものとして定義しておく。条件名に関連するデータ名は、一意名-1のKEY句の中に記述しておく。データ名-1およびデータ名-2は、それぞれ修飾できる。データ名-1およびデータ名-2は、それぞれ他の必要な指標や定数とともに、一意名-1用の最初の指標名によって指標付けしておき、一意名-1のKEY句の中に記述しておく。一意名-3、一意名-4、算術式-1または算術式-2の中で使用する一意名は、一意名-1のKEY句の中に記述してあってはならず、一意名-1用の最初の指標名によって指標付けしてあってもならない。

    一意名-1のKEY句の中のデータ名を使用するとき、または一意名-1のKEY句の中のデータ名に関連する条件名を使用するとき、一意名-1のKEY句の中のそのデータ名の前にあるすべてのデータ名またはそれらに関連する条件名を使用する。

  2. 一意名-1(つまり表引きの対象とする表要素)は、浮動小数点数であってはならない。

  3. キー・データ項目であるデータ名-1およびデータ名-2は浮動小数点数であってならない。しかし、キー・データ項目と比較する対象の一意名-3、一意名-4、定数-1、定数-2は、浮動小数点数であってもよい。

一般規則

すべての形式
  1. SEARCH文の範囲は、下記のどれかによって区切られる。

  2. 実行された無条件文-1または無条件文-2にGO TO文が含まれていなければ、制御は次の実行完結文に移される。

  3. 2次元または3次元の表を作成するためのOCCURS句が含まれるデータ項目の下位に一意名-1が属する場合、OCCURS句のINDEXED BY句を通じて、表の各次元ごとに指標名を付ける。SEARCH文が実行されると、一意名-1用の指標名(および指定されていれば一意名-2または指標名-1)だけが、値を変えられる。2次元または3次元の表の全体を表引きするためには、SEARCH文を数回実行する必要がある。指標の値を調整する必要がある場合には、SEARCH文を実行する前に、SET文を実行しておく。
形式 1
  1. 形式 1 のSEARCH文を用いると、逐次表引き処理が行われる。このときの指標の値が、その開始点となる。

    1. SEARCH文の実行が開始される時点で、一意名-1用の指標データ項目の値が出現番号の最大値よりも大きいと、そのSEARCH文の実行は直ちに停止される。一意名-1の出現番号の最大値の詳細については、OCCURS句に説明してある。(データ部 - ファイルおよびデータ記述の章のOCCURS(反復)句節を参照。) このとき、AT END指定が書いてあれば、無条件文-1が実行される。AT END指定が書いてなければ、制御は次の実行完結文に移される。

    2. SEARCH文の実行が開始される時点で、一意名-1用の指標データ項目の値が出現番号の最大値を超えないと、そのSEARCH文の処理が進められる。(一意名-1の出現番号の最大値の詳細については、データ部 - ファイルおよびデータ記述の章のOCCURS(反復)句節で説明。) まず、条件が書かれている順に評価される。この際、指定されていれば、検査の対象となる要素の出現番号を判定するために、指標データ項目の値が使用される。条件が満足されていない場合は、指標データ項目の値が増やされて、次の要素が参照できるようにされる。この処理が順次繰り返される。一意名-1用の指標データ項目の値が出現番号の最大値を超えると、上記の一般規則1a に示すとおり、その表引き処理は終了する。この間にどこかの時点で条件が満足されると、表引き処理は直ちに停止され、その条件に付随する無条件文が実行される。このとき、その指標データ項目には、条件を満足させた要素の出現番号が記録されている。

  2. VARYING指定を書かなかった場合、表引き処理に使用される指標名は、一意名-1のINDEXED BY句の中の最初の(または唯一の)指標名だけである。一意名-1用のその他の指標名の指標データ項目の内容は変わらない。

  3. VARYING指標名-1指定を書いた場合、一意名-1のINDEXED BY句の中に指標名-1が書いてあれば、その指標名がこの表引き処理に使用される。そうでない場合、またはVARYING一意名-2指定を書いた場合、一意名-1のINDEXED BY句の中の最初の(または唯一の)指標名が表引きに使用される。この場合、さらに下記の処理も行われる。

    1. VARYING指定で指標名-1を書いた場合、この指標名-1が別の表のINDEXED BY指定に書いてあると、指標名-1の指標データ項目が表わす出現番号は、一意名-1用の指標名の指標データ項目が表わす出現番号と、同時に同じだけ増加される。

    2. VARYING指定で一意名-2を書いた場合、この一意名-2が指標データ項目であると、この指標データ項目が表わす出現番号は、一意名-1用の指標名の指標データ項目が表わす出現番号と、同時に同じだけ増加される。一意名-2が指標データ項目でないと、この値は一意名-1用の指標が増加されるときに、1だけ増加される。
形式 2
  1. SEARCH文で、SEARCH ALLの処理結果が正しく得られるためには、下記の条件が共に満たされる必要がある。

    1. 表の中のデータは、一意名-1のデータ記述のASCENDING KEY句またはDESCENDING KEY句に指定された順番に並んでいること。

    2. WHEN句中に書いたキーの内容が、表の要素を一意に識別するのに十分であること。

  2. 形式 2 のSEARCH文を用いると、非逐次表引き処理が行われる。このとき、データ名-1用の指標データ項目の初期値は無視され、表引き処理につれて指標データ項目の値は変化する。ただし、その値が許される最大値よりも大きくなることも、許される最小値よりも小さくなることもない。(表の大きさについては、データ部 - ファイルおよびデータ記述の章のOCCURS(反復)句節で説明。)許容範囲内のどの指標値に関してもWHEN句に指定された条件のうちで満たされないものがある場合、AT END指定が書いてあれば、その無条件文-1に制御が移される。AT END指定が書いてなければ、次の実行完結文に制御が移される。どちらの場合も、指標データ項目の最後の値はどうなるかわからない。すべての条件が満たされたときは、そのときの要素の出現番号が指標データ項目に記録され、制御は無条件文-2に移される。

  3. 表引き処理に使用される指標名は、一意名-1のINDEXED BY句の中の最初の(または唯一の)指標名だけである。一意名-1用のその他の指標名の指標データ項目の内容は変わらない。

  4. 無条件文-2もNEXT SENTENCE指定も必要ない。これらが指定されていないと、SEARCH文は表の中の条件に一致した値に指標を設定する。

図 16-1に、WHEN指定が2つ含まれる形式 1の表引き処理の流れ図を示す。



図 16-1:WHEN 指定が2つ含まれる表引き処理の流れ図

1 これらの処理は、SEARCH文中に指定されたときにだけ行われる。
2 各無条件文にGO TO文が含まれていなければ、制御は次の実行完結文に移される。

16.2 SERVICE(サービス)文

SERVICE(サービス)文は通常、CICSプログラム内の連絡節中の項目の番地参照性を確立するために使用する。

一般形式

構文規則

  1. SERVICE LABELは、メインフレームのCICSプリプロセッサによって、制御の流れを示すために生成される。これは、一般的な用途に向けたものではない。

  2. SERVICE LABEL文は手続き部にだけ書ける。宣言節には書けない。

  3. 一意名は、連絡節内のBLLセル・ブロックで示される最初の01レベルの項目か、EXEC CICS文に続いて番地参照性を再確立する必要があるその他の連絡節内の01レベルの項目とする。

一般規則

  1. SERVICE LABEL文の次の文のところで、有効性を失っているレジスタがすべて再ロードされる。

  2. CICSプログラム中でOS/VS COBOL BLL機構を使用する場合と、手続き部の冒頭でパラメータ・リストへの番地参照性が確立されなければならない。このために、手続き部の冒頭に「SERVICE RELOAD一意名」文を追加する。ここで、一意名は連絡節内の最初の項目であり、連絡節内の他のすべての記述項に対するポインタを保持している。

  3. OSVS指令を適用して翻訳したプログラム中に、局所モードのEXEC CICS文が含まれている場合、各CICSコマンドの後ろにSERVICE RELOAD文を続けて、一意名はCICSコマンド中に使用されたのと同じポインタ(BLLセル・リファレンス)とする。

  4. OSVS指令を適用して翻訳したCICSプログラムにおいては、大きさが4096バイト以上ある連絡節を参照するたびに、SERVICE RELOAD文を使用して、4096バイトを超える部分への番地参照性を再確立させる。

  5. VS2指令を適用して翻訳したCICSプログラムにおいては、SERVICE RELOAD文は注記の役割を果たすだけである。

16.3 SET(設定)文

SETを使用して、外部スイッチの状態を変更することができる。

SETを使用して、条件変数の値を変更することができる。

SET文を使用して、ポインタ変数にデータ項目の番地を割り当てることができる。また、ポインタ変数内容を調整することができる。

SET文は、表操作処理のための参照点を決めるために、表要素の指標を設定する。

SET文を使用して、プログラムの番地または手続きポインタ・データ項目へのプログラムの入口点を割り当てることができる。

SET文を使用して、プログラムポインタ・データ項目へのポインタの番地を割り当てることができる。

SET文を使用して、オブジェクト参照を割り当てることができる。

SET文を使用して、桁詰めデータ項目の値を変更することができる。

SET文を使用して、桁詰めデータ項目の番地を他の桁詰めデータ項目に割り当てることができる。

一般形式

形式 1

形式 2

形式 3

形式 4

形式 5

形式 6

形式 7

形式 8

形式 9 (イベントポインタの値)

形式 10 (イベントポインタの番地)

形式 11 (モニターポインタの値)

形式 12 (モニターポインタの番地)

形式 13 (ミューテックスポインタの値)

形式 14 (ミューテックスポインタの番地)

形式 15 (セマフォポインタの値)

形式 16 (セマフォポインタの番地)

指令

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

構文規則

すべての形式
  1. 表意定数のNULLやNULLSあるいはポインタ名-2や手続きポインタ名-2によって参照されるデータ項目は送出し側を表す。「ADDRESS OF 一意名-2」、「ENTRY 一意名-8」、「ENTRY 定数-1」、または送出し側に保持されている値は送出し値を表す。

    ポインタ名-1やポインタ名-3や手続きポインタ名-1によって参照されるデータ項目あるいは「ADDRESS OF 一意名-1」によって暗黙的に示されるCOBOLシステム領域は受取り側を表す。

    一意名-3、整数-1、「LENGTH OF 一意名-4」は増分値を表す。

形式 1
  1. 呼び名-1は、状態を変更できる外部スイッチに関するものとする。

    SET文で参照できる外部スイッチについては、環境部の章の特殊名段落節を参照。

形式 2
  1. 条件名-1は、条件変数に関するものとする。

  2. FALSE指定を書いた場合、条件名-1のデータ記述項のVALUE句にFALSEを指定しておく。

  3. 各FALSE指定またはTRUE指定は、それらの前に来る条件名-1の反復要素および前のFALSE指定またはTRUE指定に続く条件名-1の反復要素(もしあれば)に適用される。
形式 3
  1. 一意名-1は、連絡節内の01レベルまたは77レベルの項目とする。

  2. 一意名-2は、77レベル、または01から49までのレベルのデータ項目を参照しなければならない。

    一意名-2は、連絡節内で宣言されていなければならない。

    一意名-1は、連絡節内、局所記憶節、または作業記憶節で宣言されていなければならない。

  3. ポインタ名-1とポインタ名-2はそれぞれ、USAGE IS POINTERを伴う基本データ項目を参照する一意名でなければならない。
形式 4
  1. ポインタ名-3はUSAGE IS POINTERを伴う基本データ項目を参照する一意名でなければならない。

  2. 一意名-3は整数の基本項目でなければならない。

  3. 整数-1は符合付きであってもよい。
形式 5
  1. 一意名-5と一意名-6はそれぞれ、指標データ項目または整数として記述されている基本項目を参照しなければならない。両方を指定した場合は、同一の基本項目を参照してはならない。
形式 5 および 6
  1. 整数-2と整数-3は、符号付きであってもよい。整数-2は、正の数とする。
形式 6
  1. 一意名-7は整数の基本項目を参照しなければならない。
形式 7
  1. 手続きポインタ名-1と手続きポインタ名-2はそれぞれ、USAGE IS PROCEDURE-POINTERを伴う基本データ項目を参照する一意名でなければならない。

  2. 一意名-8は英数字のデータ項目として定義されていなければならない。その値がCOBOLのプログラム名であってもCOBOL以外のプログラム名であってもよいようにするためである。

  3. 定数-1は文字定数でなければならない。
形式 8
  1. 一意名-9は字類がオブジェクトであり、受取り側項目として許されている項目でなければならない。

  2. 一意名-10はクラス名またはオブジェクト参照でなければならない。定義済みオブジェクト参照であるSUPERを指定してはならない。

  3. 一意名-9によって参照されるデータ項目が一般的オブジェクト参照である場合、一意名-10に指定できる定義済みオブジェクト参照はSELFとNULLだけである。

  4. 一意名-9によって参照されるデータ項目の記述にインターフェイス-1を指すインターフェイス名がある場合、一意名-10によって参照されるデータ項目は下記のどれかでなければならない。

    1. int-1を識別するインターフェイス、またはint-1から継承するインターフェイス名を用いて記述されたオブジェクト参照

    2. 下記の規則に従うクラス名を用いて記述されたオブジェクト参照

      1. FACTORY指定を書いた場合は、指定したクラスのファクトリ・オブジェクトのインターフェイスはint-1を使用しなければならない。

      2. FACTORY指定を書かなかった場合は、指定したクラスのインスタンス・オブジェクトのインターフェイスはint-1を使用しなければならない。

    3. ACTIVE-CLASS指定を用いて記述されたオブジェクト参照。ただし、下記の規則に従う。

      1. FACTORY指定を書いた場合は、一意名-10によって参照されるデータ項目を含むクラスのファクトリ・オブジェクトのインターフェイスはint-1を使用しなければならない。

      2. FACTORY指定を書かなかった場合は、一意名-10によって参照されるデータ項目を含むクラスのインスタンス・オブジェクトのインターフェイスはint-1を使用しなければならない。

    4. ファクトリ・オブジェクトがint-1を使用するクラス名

    5. 以下の規則に従う、定義済みオブジェクト参照のSELF

      1. SET文がクラスのファクトリ定義中のメソッドに含まれている場合、そのファクトリ定義は、int-1を参照するIMPLEMENTS句中で記述されていなければならない。

      2. SET文がクラスのインスタンス定義中のメソッドに含まれている場合、そのインスタンス定義は、int-1を参照するIMPLEMENTS句で記述されていなければならない。

    6. 定義済みオブジェクト参照のNULL

  5. 一意名-9によって参照されるデータ項目の記述にクラス名がある場合、一意名-10によって参照されるデータ項目は下記のどれかでなければならない。

    1. クラス名を用いて記述されたオブジェクト参照。ただし、下記の規則に従う。

      1. 一意名-9によって参照されるデータ項目にONLY指定が書いた場合、一意名-10によって参照されるデータ項目はONLY指定を用いて記述されていなければならず、一意名-10によって参照されるデータ項目の記述中に指定されているクラス名は一意名-9によって参照されるデータ項目の記述中に指定されているクラス名と同じである。

      2. 一意名-9によって参照されるデータ項目にONLY指定を書かなかった場合、一意名-10によって参照されるデータ項目は一意名-9によって参照されるデータ項目の記述中に指定されているのと同じクラスまたはそのサブクラスを参照しなければならない。

      3. FACTORY指定の有無は一意名-9によって参照されるデータ項目の記述と同じである。

    2. ACTIVE-CLASS指定を用いて記述されたオブジェクト参照。ただし、下記の規則に従う。

      1. 一意名-9によって参照されるデータ項目の記述にONLY指定があってはならない。

      2. 一意名-10によって参照されるデータ項目を含むクラスは一意名-9によって参照されるデータ項目の記述中に指定されているのと同じクラスまたはそのサブクラスでなければならない。

      3. FACTORY指定の有無は一意名-9によって参照されるデータ項目の記述と同じでなければならない。

    3. 定義済みオブジェクト参照のSELF。ただし、下記の規則に従う。

      1. 一意名-9によって参照されるデータ項目の記述ONLY指定があってはならない。

      2. SET文を含むオブジェクトのクラスは一意名-9によって参照されるデータ項目の記述中に指定されているのと同じクラスまたはそのサブクラスでなければならない。

      3. 一意名-9によって参照されるデータ項目の記述にFACTORY指定がない場合、SET文を含むオブジェクトはインスタンス・オブジェクトとする。

      4. 一意名-9によって参照されるデータ項目の記述にFACTORY指定がある場合、SET文を含むオブジェクトはファクトリ・オブジェクトとする。

    4. クラス名。ただし、一意名-9によって参照されるデータ項目の記述にFACTORY指定があるものとして、そのクラス名は一意名-9によって参照されるデータ項目の記述中に指定されているのと同じクラスまたはそのサブクラスを参照しなければならない。

    5. 定義済みオブジェクト参照のNULL

  6. 一意名-9によって参照されるデータ項目ACTIVE-CLASS指定を書いた場合、一意名-10によって参照されるデータ項目は下記のどちらかでなければならない。

    1. ACTIVE-CLASS指定を用いて記述されたオブジェクト参照。ただし、FACTORY指定の有無は一意名-9によって参照されるデータ項目の場合と同じでなければならない。

    2. 定義済みオブジェクト参照のSELF。ただし、下記の規則に従う。

      1. 一意名-9によって参照されるデータ項目の記述にFACTORY指定がない場合、SET文を含むオブジェクトはインスタンス・オブジェクトでなければならない。

      2. 一意名-9によって参照されるデータ項目の記述にFACTORY指定がある場合、SET文を含むオブジェクトはファクトリ・オブジェクトでなければならない。

    3. 定義済みオブジェクト参照のNULL

形式 9
  1. イベントポインタ-1は、USAGE EVENT-POINTERを含むデータ項目として定義しなければならない。

形式 10
  1. イベントポインタ-1 およびイベントポインタ-2は、USAGE EVENT-POINTERを含むデータ項目として定義しなければならない。

形式 11
  1. モニターポインタ-1は、USAGE MONITOR-POINTERを含むデータ項目として定義しなければならない。

  2. NOT を使用した場合は、CONVERTING指定を使用してはならない。

形式 12
  1. モニターポインタ-1 およびモニターポインタ-2は、USAGE MONITOR-POINTERを含むデータ項目として定義しなければならない。

形式 13
  1. ミューテックスポインタ-1 は、USAGE MUTEX-POINTERを含むデータ項目として定義しなければならない。

形式 14
  1. ミューテックスポインタ-1およびミューテックスポインタ-2 は、USAGE MUTEX-POINTERを含むデータ項目として定義しなければならない。

形式 15
  1. セマフォポインタ-1 は、USAGE SEMAPHORE-POINTERを含むデータ項目として定義しなければならない。

  2. 一意名-11 は整数を参照しなければならない。

形式 16
  1. セマフォポインタ-1 およびセマフォポインタ-2 は、USAGE SEMAPHORE-POINTERを含むデータ項目として定義しなければならない。

一般規則

形式 1
  1. 指定した呼び名-1に関する各外部スイッチの状態は、ONを指定した場合はオンに、OFFを指定した場合はオフに、設定される。(手続き部スイッチ状態条件節を参照。)
形式 2
  1. 条件名-1に関するVALUE句中の定数が、VALUE句の規則に従って、条件変数に入れられる。(データ部 - ファイルおよびデータ記述の章のVALUE(値)句節を参照。) VALUE句の中に複数の定数を指定してある場合には、条件変数の値はVALUE句内の最初の定数に等しく設定される。

  2. 複数の条件名を指定した場合、そのSET文を実行した結果は、その中の各条件名-1用にその順番どおりに別々のSET文を書いて実行したのと等しい。

  3. FALSE指定を書くと、条件名-1に関するVALUE句のFALSE指定の中の定数が、VALUE句の規則に従って条件変数に入れられる。(データ部 - ファイルおよびデータ記述の章のVALUE(値)句節を参照。)
形式 3
  1. 送出し値はデータ項目の番地を表す。ポインタ名-2を指定した場合、送出し値はポインタ名-2によって参照されるデータ項目に関して保持されている値である。「ADDRESS OF 一意名-2」を指定した場合、送出し値は一意名-2の番地を表す。

  2. ポインタ名-1を指定した場合、送出し値はポインタ名-1によって参照されるデータ名に転記される。

  3. 「ADDRESS OF 一意名-1」を指定した場合、送出し値はCOBOLのシステム領域に転記される。それ以降、 ランタイム要素は一意名-1によって参照される記憶領域が送出し値によって表される番地にあるものとして動作する。

    副プログラムを呼び出すときにリンクを維持するか否かは、STICKY-LINKAGE指令の影響を受ける。

形式 4
  1. SET文が実行される前に、ポインタ名-3によって参照されるデータ項目の値は論理レコード内のデータ項目の番地である当初の番地を表していなければならない。SET文が実行された後では、ポインタ名-3によって参照されるデータ項目の値は新しい番地を表す。当初の番地と新しい番地が共に同じ論理レコード(あるいは、番地空間がセグメント化れている環境では、同じセグメント)内に収まらない場合、ポインタ名-3によって参照されるデータ項目の値を使用すると、結果はどうなるか分からない。

  2. UP句を指定した場合、増分値に指定された値を当初の番地に加えて、新しい番地が算出される。

  3. DOWN句を指定した場合、増分値に指定された値を当初の番地から引いて、新しい番地が算出される。
形式 5
  1. 指標名-1 または一意名-5が現れるたびに、以下の手順が繰り返される。このときつねに、 指標名-2 または一意名-6 の値が使用される。これは、これらが実行される文の先頭にあるためである。一意名-5に関連づけられた添え字や指標はどれも、そのデータ項目の値が変更される直前に評価される。

    1. 指標名-1を指定すると、指標名-1 に値が設定され、指標名-2、一意名-6、または整数-2が参照する表要素の出現回数に対応する表要素を参照する。一意名-6が指標データ項目を参照する場合、または指標名-2が一意名-1と同じ表に関連している場合、変換は行われない。

    2. 一意名-5が指標データ項目を参照する場合、それを指標名-2または、同様に指標項目を参照する一意名-6のどちらかの内容と等しく設定できる。どちらの場合も、変換は行われない。

    3. 一意名-5が指標データ項目を参照しない場合、指標名-2の値に対応する出現番号にのみ設定できる。この場合、一意名-6も整数-2も使用できない。

  2. SET文における各種の作用対象の有効な組合わせを、表16-1に示す。この中に、適用される一般規則の番号も示す。

    表 16-1:指標を作用対象とするSET 文の有効な作用対象の組合わせ
    送出し側項目 受取り側項目
    整数データ項目 指標名 指標データ項目
    整数定数 無効/11c 有効/11a 無効/11b
    整数データ項目 無効/11c 有効/11a 無効/11b
    指標名 Valid/11c 有効/11a 有効/11b1
    指標データ項目 無効/11c 有効/11a1 有効/11b1

    1 =変換は行われない

形式 5 および 6
  1. 指標名は対応する表を定義する際に、OCCURS句のINDEXED BY指定を用いて定義しておく。

  2. 指標名-1を指定する場合、SET文を実行した後の指標の値は、対応する表の要素の数に見合っていなければならない。 SEARCH文またはPERFORM文を実行した後の指標名の指標の値は、どうなっているかわからない。(手続き部 - PERFORM - ROLLBACKの章のPERFORM(実行)文およびSEARCH(表引き)文節を参照。)

    指標名-2を指定する場合、SET文を実行する前の指標の値は、表中の、指標名-1に関連する要素の数に対応していなければならない。

    指標名-3を指定する場合、SET文を実行する前および後の指標の値は、表中の、指標名-3に関連する要素の数に対応していなければならない。

形式 6
  1. 指標名-3の内容が、整数-3または一意名-7によって表わされる出現番号の値だけ、増分(UP BY)または減分(DOWN BY)される。指標名-3に複数の項目を指定すると、そのすべてについて上記の処理が繰り返される。その際、初回と同じように、一意名-7の値が使用される。
形式 7
  1. 送出し値はCOBOLまたはCOBOL以外のプログラム内の手続きの開始番地を表す。

  2. 送出し値は手続きポインタ-1によって参照されるデータ項目に転記される。

  3. 手続きポインタ名-2を指定した場合、送出し値は手続きポインタ-2によって参照されるデータ項目内に収められている値となる。

  4. 定数-1、または一意名-8によって参照されるデータ項目の内容は、参照される手続きの名前である。参照される手続きがCOBOLの手続きである場合、参照される手続きの名前にはプログラム名または入口名が収められていなければならない。前者は参照されるプログラムのプログラム名段落に記述されているものである。後者は参照される手続きのENTRY文に記述されているものである。

    呼ばれるプログラムがCOBOLのプログラムではない場合、プログラムまたは手続きの名前を形成するための規則がインターフェイスに関するCOBOLシステムのマニュアルに記載されている。

    参照される手続きが前に利用可能にされており、SET文を実行する時点でもまだ利用可能な場合には、送出し値は参照される手続きの番地を表す。

    参照される手続きがSET文を実行する時点でもまだ利用可能ではない場合には、送出し値はCOBOLシステムのエラー手続きの番地を表す。

形式 8
  1. 一意名-10がオブジェクト参照である場合、一意名-10によって識別されるオブジェクトへの参照が、一意名-9によって参照される各データ項目に指定された順に収められる。

  2. 一意名-10がクラス名である場合、一意名-10によって識別されるクラスのファクトリ・オブジェクトへの参照が、一意名-9によって参照される各データ項目に指定された順に収められる。

形式 9 および 10
  1. 複数のイベントポインタ-1 を指定すると、各イベントポインタ-1に対して、SET文での指定と同じ順序で別のSET文が書かれたときと同じ結果となる。

形式 9
  1. SET文の実行により、 イベントポインタ-1が参照するイベントの値が、TRUEまたはFALSEに設定される。


注:イベントがFALSEに設定されると、そのイベントを参照するWAIT文を実行するどのスレッドも、そのイベントが別のスレッドでTRUEに設定されるまで実行されない。


形式 10
  1. イベントポインタ-1は、イベントポインタ-2 が参照するものと同じイベントデータ項目を参照するよう設定される。

形式 11 および 12
  1. 複数のモニターポインタ-1を指定すると、各モニターポインタ-1に対して、SET文での指定と同じ順序で別のSET文が書かれたときと同じ結果となる。

形式 11
  1. NOT指定を使用しない場合、モニターポインタ-1 が参照するモニターの値は、BROWSING、READING、またはWRITINGのいずれかに設定され、これにより、対応する形式のロックが設定する。この特定のモニターに対するこの特定の種類のロックは結果として、一致するNOT指定または一致するCONVERTING FROM指定を含むSET文により解除されなければならない。

    たとえば、ロックが以下の文で設定されたとする。

    	SET モニター-1 TO READING 

    このロックは以下の文で解除できる。

    	SET モニター-1 TO NOT READING

  2. モニターに対して設定された現在の種類のロックは、CONVERTING指定を使用して変更される。FROM指定で指定された種類のロックは、そのスレッドにより現在設定されていなければならない。さらに、文が正常に実行されると、微細な操作により、TO指定で指定された種類のロックに変更される。

  3. 間にロックを解除するSET文を挟まない、連続したSETモニター文を実行すると、入れ子のロックを設定できる。一度、READINGロックが設定されると、そのスレッド中にBROWSINGロックもWRITINGロックも入れ子にすることはできない。 一度、BROWSINGロックまたはWRITINGロックが設定されると、そのスレッド中に他のどのレベルのロックも入れ子にすることはできない。

形式 12
  1. モニターポインタ-1 は、モニターポインタ-2が参照するものと同じモニターデータ項目を参照するよう設定される。

形式 13 および 14
  1. 複数のミューテックスポインタ-1 を指定すると、各ミューテックスポインタ-1に対して、SET文での指定と同じ順序で別のSET文が書かれたときと同じ結果となる。

形式 13
  1. SET文の実行により、ミューテックスポインタ-1が参照するミューテックスの値はONまたはOFFに設定される。

  2. ミューテックスがONに設定された場合、そのスレッド中でそのミューテックスがOFFに設定されるまで、ONに設定しようとするスレッドはどれも実行されない。

形式 14
  1. ミューテックスポインタ-1 は、ミューテックスポインタ-2が参照するものと同じミューテックスデータ項目を参照するよう設定される。

形式 15 および 16
  1. 複数のセマフォポインタ-1 を指定すると、各セマフォポインタ-1 に対して、SET文での指定と同じ順序で別のSET文が書かれたときと同じ結果となる。

形式 15
  1. セマフォポインタ-1が参照するセマフォデータ項目の内容は、整数-4 の値に、または一意名-11が参照するデータ項目に対応する値ずつ、大きく(UP BYの場合)または小さく(DOWN BYの場合)なる。その後、セマフォポインタ-1が出現するたびにこの処理が繰り返され、そのたびに、一意名-11 が参照するデータ項目の値が使用される。 これは、この値が実行される文の先頭にあるためである。

  2. セマフォがDOWN BY n に設定され、n より小さい場合は、そのスレッドは、別のスレッドがセマフォを n 以上に上げるまで実行されない。

形式 16
  1. セマフォポインタ-1 は、セマフォポインタ-2が参照するものと同じセマフォデータ項目を参照するよう設定される。

16.4 SORT(整列)文

SORT(整列)文は、ファイル中のレコードを整列させる。この処理は3つの段階に分かれる。最初の段階では、入力手続きを実行するかまたは他のファイルからレコードを転送するかして、整列用ファイルを作成する。次の段階では、指定されたキーの組に基づいて、整列用ファイル中のレコードの順序をそろえる。最後の段階では、整列させたレコードをその順番に出力手続きまたは出力ファイルに引き渡す。

表の中の要素を整列させるためにも、SORT文を使用できる。

SORT動詞の使用例は、言語リファレンス - 追加トピックの章の入出力手続きを使用したファイルのSORT およびSORTの表の項目節に掲載されている。

一般形式

形式 1

形式 2

指令

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

構文規則

すべての形式
  1. 形式 1のSORT文は、手続き部の宣言部分、SORT文またはMERGE文に関連する入力手続き、出力手続きの場所には置くことができない。

    形式 2のSORT文は宣言節に置いてもよい。

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

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

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

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

    4. キーが外部浮動小数点数であると、コンパイラはそのデータ項目を数字データとしてではなく文字データとして扱う。レコードがそろえられる順序は、使用する文字の照合順序に左右される。

    5. キー・データ項目が内部浮動小数点数である場合、キーの順序は数値順となる。
形式 1
  1. ファイル名-1は、データ部の整列併合ファイル記述項に記述しておく。

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

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

    2. ファイル名-1に複数のレコード記述を含める場合、キー・データ項目は1つのレコード記述の中だけに指定する。

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

    4. ファイル名-1のファイルのレコードが可変長である場合、データ名をキーに指定するデータ項目はすべて、そのファイルの最初の x 文字位置のレコードの範囲内に入っていること。ここで x は、ファイル名-1によって参照されるファイルに指定された最小レコードサイズを示す。

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

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

  5. ファイル名-2のファイルとファイル名-3のファイルは、同じマルチ・ファイル・リールに収録されていてもよい。

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

  7. 1つのSORT文の中で使用しているファイル名の組は、SAME SORT AREA句またはSAME SORT-MERGE AREA句には指定できない。GIVING指定の対象となっている複数のファイルは、同じSAME句には指定できない。

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

    これらのレコードを構成する基本データ項目のデータ記述が異なる場合、対応するレコード同士の文字数が等しくなるように記述することは、プログラマの責任である。

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

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

  11. 手続き名-1、手続き名-2、手続き名-3、手続き名-4は、節名とする。

    この制限は削除された。

  12. USING句またはGIVING句に10個以上のファイル名を指定したい場合、コンパイラ指令のCALLSORT"EXTSM"を使用しなければならない。この指令を使用すると、255個までのファイルを指定できる。
形式 2
  1. データ名-2は修飾してもよい。データ名-2のデータ記述項には、OCCURS句を記述しておく。

  2. データ名-1のデータ項目は、データ名-2のデータ項目と同じであるか、またはデータ名-2のデータ項目の下位に属する項目とする。

  3. データ名-1とデータ名-2が同じでない場合、データ名-1のデータ項目のデータ記述項にOCCURS句が記述してあってはならない。また、データ名-1のデータ項目は、データ名-2の下位に属しOCCURS句を伴うデータ項目の下位にも属してはならない。

  4. データ名-2の表の記述中にKEY指定がある場合にだけ、KEY指定を省略できる。

  5. OCCURS句を伴うデータ項目の下位にデータ名-2のデータ項目が属す場合、データ名-2のデータ項目の親であるOCCURS句を伴うデータ項目には、指標名を付ける。

一般規則

すべての形式
  1. 語ASCENDINGおよびDESCENDINGは、別のASCENDINGまたはDESCENDINGが出てくるまで、後ろに繰り返し続くすべてのデータ名-1に効力を及ぼす。

  2. データ名-1のデータ項目は、キー・データ項目である。このキー・データ項目によって、ファイル名-1のファイルからレコードが引き取られる順序または整列が終了した後で表の要素が格納される順序が決まる。キーの強さの順序は、SORT文の中に記述した順である。ASCENDINGまたはDESCENDING の指定は、キーの強さには関係ない。

  3. DUPLICATES指定をした場合、あるレコードまたは表要素のすべてのキー・データ項目の内容が他のいくつかのレコードまたは表要素の対応するキー・データ項目の内容と等しいとき、引き取られるレコードの順序は下記のようになる。

    1. SORT文の中または実行時スイッチに指定された入力ファイルの順序。 入力ファイルからレコードを読み込んだ場合は、その順序が保たれる。

    2. 入力手続きが用いられているときは、入力手続きからレコードが引き渡された順序。

    3. 整列処理が実行される前の、表要素の内容の相対順序。

  4. DUPLICATES指定をしなかった場合、あるレコードまたは表要素のすべてのキー・データ項目の内容が他のいくつかのレコードまたは表要素の対応するキー・データ項目の内容と等しいとき、引き取られるレコード順序または表要素の内容の相対順序はどうなるかわからない。

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

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

    2. 次は、プログラム用に設定してある文字の照合順序。
形式 1
  1. SORT文は、ファイル名-2のファイル中のすべてのレコードまたは入力手続きによって、ファイル名-1のファイルに引き渡されるレコードを受け取る。その後、データ名-1のデータ項目の値とASCENDING またはDESCENDING指定によって定まる順に、それらのレコードを並べ変え、出力手続きまたはファイル名-3のファイルに引き渡す。

  2. ファイル名-1のファイルから返された2つのレコードの相対順序を決めるために、比較条件の作用対象比較規則に従い、対応するキー・データ項目の内容が、最も強いキー・データ項目から順に比較される。

    1. 対応するキー・データ項目同士の内容が異なり、キーにASCENDING指定がなされている場合、キーの値が小さい方のレコードが先に返される。

    2. 対応するキー・データ項目同士の内容が異なり、キーにDESCENDING指定がなされている場合、キーの値が大きい方のレコードが先に返される。

    3. 対応するキー・データ項目同士の内容が等しい場合、次に強いキー・データ項目の内容に基づいて、順序が決定される。

  3. SORT文の実行は、下記の3つの段階に区分される。

    1. ファイル名-1のファイル中で、レコードを利用できるようにする。このためには、入力手続き中のRELEASE文を実行するか、またはファイル名-2に対して暗黙的にREAD文を実行する。この段階の処理が始まるときに、ファイル名-2のファイルは開かれていてはならない。この段階の処理が終わるとき、ファイル名-2のファイルは閉じられている。

    2. ファイル名-1のファイル中のレコードの順序がそろえられる。この段階では、ファイル名-2およびファイル名-3のファイルの処理は、何も行われない。

    3. ファイル名-1のファイルのレコードがそろえられた順序に従って、利用できるようにされる。このために、順序をそろえられたレコードがファイル名-3のファイルに書き出されるか、RETURN文を実行することによって出力手続きで利用できるようにされる。この段階の処理が始まるときに、ファイル名-3のファイルは開かれていてはならない。この段階の処理が終わるとき、ファイル名-3のファイルは閉じられている。

  4. 入力手続きでは、RELEASE文によって1件ずつファイル名-1のファイルに引き渡されるレコードを、必要に応じて選択したり修正したり複写したりする。この入力手続きの範囲には、その中からCALL文、PROGRAM指定のないEXIT文、GO TO文、PERFORM文によって制御を移された結果実行されるすべての文が含まれる。この入力手続きの範囲内で、MERGE文、RETURN文、SORT文を起動するようなことはできない。

  5. 入力手続きを指定すると、SORT文によってファイル名-1のファイル中のレコードの並べ替えが開始される前に、入力手続きに制御が渡される。コンパイラは、入力手続きの最後の文の末尾に復帰機構を組み込む。入力手続きの最後の文に制御が渡ると、ファイル名-1のファイルに引き渡されているレコードの整列処理が開始される。

  6. USINGを指定すると、ファイル名-2のファイル中のすべてのレコードが、ファイル名-1のファイルに書き出される。SORT文を実行すると、ファイル名-2の各ファイルに対して、下記の処理が行われる。

    1. ファイルの処理が開始される。これはINTPUT指定およびWITH LOCK指定をしたOPEN文を実行するように行われる

    2. 論理レコードが、入力ファイルから整列用ファイルに引き渡される。これはNEXTおよびAT END指定をしたREAD文が実行されるように行われる。ファイル名-1のファイルに含まれるレコードが固定長である場合、ファイル名-2のファイル中にファイル名-1の固定長レコードよりも短いものがあると、ファイル名-2のレコードがファイル名-1のファイルに引き渡されるときに、ファイル名-2のレコードの後部に空白が埋められる。ファイル名-1のファイルのレコードが可変長であると、ファイル名-1のファイルに書き出されるレコードの大きさは、ファイル名-2またはファイル名-3から読み込んだときのレコードの大きさとなる。このことは、ファイル名-1のファイルのファイル記述項に指定したRECORD VARYING DEPENDING ON句またはOCCURS DEPENDING ON句のDEPENDING ON指定の対象となっているデータ項目の内容にかかわらず、適用される。

    3. ファイルの処理が終了される。これは任意指定の何もないCLOSE文が実行されたように行われる。この終了処理が済んだ後で、SORT文によるファイル名-1のファイルの整列処理が開始される。

      相対ファイルに関しては、GIVING指定の対象にファイル名-2を指定しないと、SORT文の実行が終了したときに、RELATIVE KEYデータ項目の内容はどうなっているかわからない。

      USE AFTER EXCEPTION手続きを指定してあれば、上記の暗黙の処理においてそれも対象となる。しかし、そのUSE手続きの中から、ファイル名-2のファイルを操作したり、そのレコード領域をアクセスしたりするような文が実行されるようなことがあってはならない。

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

  7. 出力手続きでは、RETURN文によって1件ずつファイル名-1のファイルから引き取られる整列済みのレコードを、必要に応じて選択したり修正したり複写したりする。この出力手続きの範囲には、その中からCALL文、PROGRAM指定またはMETHOD指定のないEXIT文、GO TO文、PERFORM文によって制御を移された結果実行されるすべての文が含まれる。また、この出力手続きの範囲内の文を実行した結果として実行される宣言手続き中のすべての文も、この出力手続きの範囲に含まれる。この出力手続きの範囲内で、MERGE文、RELEASE文、SORT文を起動するようなことはできない。

  8. 出力手続きを指定すると、SORT文によってファイル名-1のファイル中のレコードの並べ替えが終了した後で、出力手続きに制御が渡される。コンパイラは、出力手続きの最後の文の末尾に復帰機構を組み込む。出力手続きの最後の文に制御が渡ると、復帰機構によってSORT文の処理が終了され、SORT文の次の実行文に制御が移される。出力手続きに入る前に、レコードの並べ替えは済んでいる。要求されれば次のレコードを引き渡せる状態に達している。出力手続き中のRETURN文は、次のレコードを求める要求である。

  9. GIVINGを指定すると、順序をそろえられたすべてのレコードがファイル名-3のファイルに書き出される。これはSORT文に暗黙的に出力手続きを使用することである。SORT文を実行すると、ファイル名-3の各ファイルに対して下記の処理が行われる。

    1. ファイルの処理が開始される。これはOUTPUT指定をしたOPEN文を、暗黙的に実行することである。この開始処理は、入力手続きがあれば、その実行が済んだ後で行われる。

    2. 論理レコードが、整列用ファイルから出力ファイルに書き出される。これは何も任意指定をしないWRITE文を、暗黙的に実行することである。ファイル名-3のファイルに含まれるレコードが固定長である場合、ファイル名-1のファイル中にファイル名-3の固定長レコードよりも短いものがあると、ファイル名-1のレコードがファイル-3のファイルに書き出されるときに、ファイル名-1のレコードの後部に空白が埋められる。ファイル名-3のファイルのレコードが可変長であると、ファイル名-3のファイルに書き出されるレコードの大きさは、ファイル名-1から読み込んだときのレコードの大きさとなる。このことは、ファイル名-3のファイルのファイル記述項に指定したRECORD VARYING DEPENDING ON句またはOCCURS DEPENDING ON句の対象となっているデータ項目の内容にかかわらず、適用される。

      出力ファイルが相対ファイルである場合、最初に引き取られるレコードのRELATIVE KEYデータ項目の値は "1" 、2番目に引き取られるレコードのRELATIVE KEYデータ項目の値は "2" 、という具合いになる。SORT文の実行が終了した後のRELATIVE KEYデータ項目の内容は、どうなっているかわからない。

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

      USE AFTER EXCEPTION手続きを指定してあれば、上記の暗黙の処理において、それも対象となる。しかし、そのUSE手続きの中から、ファイル名-3のファイルを操作したりそのレコード領域を呼び出したりするような文が実行されるようなことがあってはならない。外部的に定義されているファイル境界を超えて最初に書き出しが試みられたときに、そのファイルに関してUSE AFTER EXCEPTION手続きを指定してあれば、その手続きが実行される。USE文の規則に従って制御が戻されると、さらに暗黙の書き出し処理が行われることはない。上記のように、そのファイルの処理は終了される。

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

  10. SORT文を含むプログラムを区分化できる。(言語リファレンス - 追加トピック区分化節を参照。)ただし、下記の制限がある。

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

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

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

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

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

      • SORT文と同じ独立区分中に完全に含まれる。

  11. SORT ランタイム要素用に、特殊レジスタのSORT-RETURNが用意されている。この特殊レジスタには、整列処理が終わったときに0(正常終了)または16(不成功)が設定される。入力/出力手続きの中で、この特殊レジスタに値16を設定して、途中で整列処理を終わらせることができる。この場合、整列処理は次のRETURN文またはRELEASE文のところで終了される。
形式 2
  1. SORT文は、データ名-2が参照する表の要素を並べ替え、並べ替えた表を、ASCENDING またはDESCENDING指定により決定された順序、またはデータ名-2に関連づけられたKEY指定により決定された順序で、データ名-2に表示する。

  2. 並べ替えた後の表要素の相対順序を決めるために、比較条件の規則に従い、対応するキー・データ項目の内容が、最も強いキー・データ項目から順に比較される。

    1. 対応するキー・データ項目同士の内容が異なり、キーにASCENDING指定が含まれている場合、キーの値が小さい方の表要素に小さい出現番号が割り当てられる。

    2. 対応するキー・データ項目同士の内容が異なり、キーにDESCENDING指定が含まれている場合、キーの値が大きい方の表要素に小さい出現番号が割り当てられる。

    3. 対応するキー・データ項目同士の内容が等しい場合、次に強いキー・データ項目の内容に基づいて、順序が決定される。

  3. データ名-2の表の要素の出現番号は、OCCURS句の規則に従って決定される。

  4. OCCURS句を伴うデータ項目の下位に属するデータ項目をデータ名-2が指す場合、親の表の最初または唯一の指標名を、希望する値に設定してからSORT文を実行する。

  5. KEY指定をしないと、データ名-2が参照する表のデータ記述項中のKEY指定によって、順序が決定される。

  6. KEY指定をすると、この指定の方が、データ名-2の表のデータ記述項中のKEY指定よりも優先する。

  7. KEY指定をしてもデータ名-1を省略すると、データ名-2が参照するデータ項目がキー・データ項目とされる。

  8. データ名-2が参照する表の要素を整列した結果は、同じ表に書き戻される。

  9. COLLATING SEQUENCE指定は注記としてのみ処理される。

16.5 START(位置決め)文

START(位置決め)文は、相対ファイルまたは索引ファイルの中で、以降に検索するレコードに論理的に位置付ける。この文は順編成のファイルには適用できない。

START文は、同期または非同期でスレッドの実行を開始する。

一般形式

形式 1 (相対ファイル)

形式 2 (索引ファイル)

形式 3 (スレッド)

必須の比較文字 ">"、"<"、">="、"<="、"=" には下線を引いていないことに注意。これは、 ">" (以上)のような他の記号と混同することを避けるためである。

構文規則

すべての形式 (相対ファイルおよび索引ファイル)
  1. ファイル名-1は、相対ファイルまたは索引ファイルの名前にする。

  2. ファイル名-1は、順呼出し法または動的呼出し法のファイルの名前にする。

  3. データ名-1は修飾してもよい。

  4. ファイル名-1に適用できるUSE手続きを指定していないときは、INVALID KEY句を指定する。

    この規則は強制しない。

形式 1 (相対ファイル)
  1. KEY指定をする場合、データ名-1は対応するファイル管理記述項のRELATIVE KEYに指定したデータ項目とする。
形式 2 (索引ファイル)
  1. KEY指定をする場合、ファイル名-1のレコードキーとして指定したデータ項目を、データ名-1のデータ項目として使用できる。さらに、ファイル名-1のレコードキーとして指定したデータ項目の下位に属し、そのレコードキー・データ項目と左端の文字位置が同じで項類が英数字のデータ項目を、データ名-1のデータ項目として使用できる。

  2. 分割キー名-1のデータ項目には、ファイル名-1のレコードキーとして指定したデータ項目のいくつかを使用できる。

  3. WITH SIZE指定は、位置決め処理で使用するキー中の文字数を示す。

  4. WITH SIZE指定の対象とした場合、一意名-1は基本整数データ項目の名前とする。
形式 3 (スレッド)

  1. 定数-1 は、数字定数以外の定数でなければならず、表意定数であってはならない。

  2. 一意名-1 は、英数字データ項目として定義されなければならず、その値はCOBOLプログラム名とCOBOL以外のプログラム名のどちらでもよい。

  3. 一意名-3 は、USAGE POINTERまたはサイズが4バイトのデータ項目のいずれかとして定義しなければならない。この定義は、新しいスレッドに対するEXIT PROGRAM / STOP RUN文中のGIVING/RETURNING項目の定義により異なる。一意名-3は、USAGE POINTER項目として定義した場合は、関数一意名であってはならない。

  4. スレッドポインタ-1 は、USAGE THREAD-POINTERとして定義しなければならない。

  5. 一意名-4 は、4桁以上の長さの整数データ項目として定義しなければならない。

一般規則

すべての形式 (すべてのファイル)
  1. START文を実行するときには、ファイル名-1のファイルはINPUTモードまたはI-Oモードで開いておく。(手続き部 - MERGE - OPENの章のOPEN(開く)文節を参照。)

  2. KEY指定をしないと、比較演算IS EQUAL TOを暗黙的に指定したものとみなされる。

  3. START文を実行すると、ファイル名-1に対応するFILE STATUSデータ項目を指定してあれば、その値が更新される。(手続き部の章の入出力状態節を参照。)

  4. START文が、レコードロックを取得したり検出したり解除したりすることはない。
形式 1 (相対ファイル)
  1. KEY指定中の比較演算子によって表わされる比較は、ファイル名-1のファイル中のレコードのキー(下記の6項を参照)とデータ名-1との間で行われる。

    1. 比較演算子で、キーをデータ名-1と等しいか、より大きいか、以上と指定すると、

      ファイル中に現存する論理レコードのうちで、その比較条件を満足する最初のものにファイル位置指示子が位置付けられる。

    2. 比較演算子で、キーをデータ名-1より小さいか、以下と指定すると、ファイル中に現存する論理レコードのうちで、その比較条件を満足する最後のものにファイル位置指示子が位置付けられる。

    3. 比較条件を満たすレコードがファイル中に存在しないと、無効キー条件が発生する。この場合、START文の実行は不成功に終わり、ファイル位置指示子の内容はどうなるかわからない。(手続き部の章の無効キー条件節を参照。)

  2. 上記の5項の比較では、ファイル名-1のRELATIVE KEY句に指定したデータ項目が使用される。したがって、ファイル名-1にはRELATIVE KEY句を指定しておく。
形式 2 (索引ファイル)
  1. KEY指定中の比較演算子によって表わされる比較は、ファイル名-1のファイル中のレコードのキー(下記の8項を参照)とデータ名-1との間で行われる。ファイル名-1が索引ファイルであり、作用対象の大きさが等しくないと、短い方を超える長い方の右側の部分が切捨てられたように比較が進められる。文字の比較に関するその他の規則が、すべてこの比較に適用される。ただし、PROGRAM COLLATING SEQUENCE句は、この比較には効力をもたない。(手続き部の章の比較条件節の文字作用対象の比較を参照。)

    1. 比較演算子で、キーをデータ名-1と等しいか、より大きいか、以上と指定すると、

      ファイル中に現存する論理レコードのうちで、その比較条件を満足する最初のものにファイル位置指示子が位置付けられる。

    2. 比較演算子で、キーをデータ名-1より小さいか、以下と指定すると、ファイル中に現存する論理レコードのうちで、その比較条件を満足する最後のものにファイル位置指示子が位置付けられる。キーの値が重複するものが存在すると、そのうちの最後のものにファイル位置指示子が位置付けられる。

    3. 比較条件を満たすレコードがファイル中に存在しないと、無効キー条件が発生する。この場合、START文の実行は不成功に終わり、ファイル位置指示子の内容はどうなるかわからない。(手続き部の章の無効キー条件節を参照。)

  2. 上記の7項の比較においてKEY指定をした場合は、データ名のデータ項目(キー)が使用される。

  3. 上記の7項の比較においてKEY指定をしなかった場合は、ファイル名-1のRECORD KEY句に指定したデータ項目(キー)が使用される。

  4. START文の実行が正常に終了すると、下記のように参照キーが設定され、後続の形式 3のREAD文で使用できるようになる。 (手続き部 - PERFORM - ROLLBACKの章のREAD(読み込み)文節を参照。)

    1. KEY指定をしなかった場合は、ファイル名-1の主レコードキーが参照キーとなる。

    2. KEY指定をし、ファイル名-1のレコードキーとしてデータ名-1

      または分割キー名-1

      を指定した場合は、そのレコードキーが参照キーとなる。

    3. KEY指定をし、ファイル名-1のレコードキーとしてデータ名-1

      または分割キー名-1

      を指定しなかった場合は、データ名-1

      または分割キー名-1

      と左端の文字位置が同じであるレコードキーが参照キーとなる。

  5. START文の実行が不成功に終わったときは、参照キーはどうなっているかわからない。
形式 3 (スレッド)

  1. 定数-1、一意名-1、または手続きポインタ-1 は、翻訳単位でもっとも外部にあるプログラム名、プログラム中の入口点、または他の言語のラベルであるプログラム名を参照しなければならない。これが、新規作成されたスレッドの実行開始点となる。

  2. 一意名-2を指定した場合は、参照により渡される単一のパラメータが受け入れられるよう、新規作成されたスレッドの開始点を定義しなければならない。

  3. BY CONTENT指定を使用した場合は、一意名-2の内容が、システムにより割り当てられたスレッドセーフの作業領域にコピーされ、この作業領域への参照が新規作成されたスレッドの開始点に渡される。この作業領域は、作成したプログラムのデータ領域の有効期限にかかわらず、このスレッドの実行中は有効のままである。

  4. BY CONTENT指定を使用しない場合は、 一意名-2 への直接参照が新規作成されたスレッドの開始点に渡される。プログラマは、新規作成されたスレッドが参照する間、このデータ領域が確実に有効であるようにしておく必要がある。

  5. RETURNING指定を使用した場合は、新規作成されたスレッドが動作を完了し、一意名-3 の値を返し、制御をSTART文に戻す。

  6. IDENTIFIED BY指定を使用した場合は、新規作成されたスレッドの実行が開始され、新規作成されたスレッドを参照するハンドルがスレッドポインタ-1に配置され、 制御がSTART文に返される。ハンドルを使用して、WAIT文は戻り値を取得し、実行の同期を取り、スレッドの資源を解放する。このハンドルは、CBL_THREAD_登録集ルーチンで使用されるような有効なスレッドハンドルである。

  7. RETURNING指定もIDENTIFIED指定も使用しない場合は、新規作成されたスレッドの実行が開始され、制御がSTART文に返される。スレッドの資源はすべて、スレッドが終了したときに自動的に解放される。

  8. STATUS指定を使用した場合は、START文の実行により、CBL_THREAD_登録集ルーチンに対して指定された戻り符号のいずれかが、一意名-4中に配置される。

  9. START文が不成功に終わった場合、一意名-4が指定されていれば、CBL_THREAD_登録集ルーチンに対して指定された戻り符号のいずれかがその中に配置される。さらに、以下のいずれかが行われる。

    1. ON EXCEPTION指定を使用した場合は、制御が無条件文-1に渡される。その後、無条件文-1 で指定された各文の規則に従って、実行が続行される。 手続きの分岐、または制御の移動を明示的に指示する条件文が実行された場合は、制御が文の規則に従って渡される。そうでない場合は、無条件文-1 の実行が完了すると同時に、START文の最後に制御が渡され、NOT ON EXCEPTION指定が使用されていても無視される。

    2. 上記以外の場合で、NOT ON EXCEPTION指定またはSTATUS指定を使用した場合は、START文の最後に制御が渡され、NOT ON EXCEPTION指定が使用されていても無視される。

    3. 上記以外の場合、実行単位は実行時エラーとともに終了する。

  10. START文が正常に実行された場合は、以下が記載された順序通りに行われる。

    1. STATUS指定を使用した場合は、ZEROが一意名-4に転記される。

    2. NOT ON EXCEPTION指定を使用した場合は、制御が無条件文-2に渡される。 その後、無条件文-2 で指定された各文の規則に従って、実行が続行される。手続きの分岐、または制御の移動を明示的に指示する条件文が実行された場合は、制御が文の規則に従って渡される。そうでない場合は、無条件文-2 の実行が完了すると同時に、START文の最後に制御が渡され、ON EXCEPTION指定が使用されていても無視される。

16.6 STOP(停止)文

STOP(停止)文は、実行単位の実行を、永久的にまたは一時的に停止させる。

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

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

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

一般形式

形式 1

形式 2

構文規則

  1. 定数-1は語ALLで始まる表意定数であってはならない。

  2. 定数-1が数字定数の場合、符号なしの整数とする。

    符号付きの整数を使用できる。

  3. 整数-1は 符号を付けてもよい。

  4. 完結文の中の一連の無条件文の中にSTOP RUN文を書く場合、その中の最後の文にする。

    必ずしも、一連の無条件文の最後にSTOP RUN文を書かなくてもよい。しかし、一連の文の中でSTOP RUN文よりも後ろにあるものは実行されない。

  5. GIVING と RETURNING は同義語であり、どちらを書いてもよい。

  6. 一意名-1は8バイト以下のサイズとする。.

  7. STOP RUN GIVING文が、START文により作成され(形式 3 スレッド)たスレッド内で実行され、ADDRESS指定が使用されない場合、一意名-1は、USAGE POINTERまたはサイズが4バイトのデータ項目として定義しなければならない。一意名-1の定義は、START文中のRETURNING項目の定義により異なる。 一意名-1は、USAGE POINTER項目として定義された場合に関数一意名であってはならない。

一般規則

  1. RUN指定を書くと、実行単位の実行が停止され、制御はオペレーティングシステムに移される。

  2. STOP RUN文を実行中に、実行単位内の開かれている各ファイルに関して、選択指定の何もないCLOSE文が暗黙的に実行される。それらのファイルに関連するUSE手続きがあっても、実行されない。

  3. STOP RUN文の実行により、戻り値がシステム領域で設定される。COBOL以外のランタイム要素は通常、このシステム領域を使用して戻り値を返す。オペレーティングシステムが、動作するプログラムからオペレーティングシステムへ値を返す機能をサポートしている場合、値はシステム領域から返される。

    GIVING指定を書かないと、実行単位の動作は下記のようになる。具体的には、システム領域がCOBOLの数字データ項目であり、それにUSAGE COPM-5が指定されていて、そのサイズはCOBOLシステムの外の操作環境によって決められているものとして宣言されている状態で、RETURN-CODEを送出し側としシステム領域を受取り側として、MOVE文を実行したかのように動作する。(RETURN-CODE詳細については、COBOL言語の概念の章の特殊レジスタ節を参照。)

    「GIVING 一意名-1」指定を書いた場合、一意名-1はシステム領域に戻り値を収めるのにちょうど必要な長さであり、オペレーティング・システムによって期待される型と用途のものでなければならない。通常、一意名-1はPIC S9 (9) USAGE COMP-5を明示的または暗黙的に指定して宣言する必要がある。一意名-1を送出し側項目とし、システム領域を受取り側項目として、MOVE文を実行したかのように、実行単位は動作する。

    「GIVING 整数-1」指定を指定した場合、整数-1の値はシステム領域に保持できるよりも大きくてはならない。実行単位は、整数-1を送出し側としそのシステム領域を受取り側として、MOVE文を実行したかのように動作する。

  4. 「STOP定数-1」を指定すると、操作員に定数-1が通知される。実行用プログラムの再開が行われると、次の実行文から処理が継続される。実行キーまたはそれと機能的に等しいキーを押すと、実行が再開される。

  5. START文またはCBL_CREATE_THREAD登録集ルーチンで作成されたスレッド中で実行されると、STOP RUN GIVING文は実行単位を終了しない。単に、戻り値を返し、スレッドを終了させる。 以下の文と同じである。

    CALL 'CBL_THREAD_EXIT' USING BY VALUE ADDRESS OF スレッドパーム

  6. START文またはCBL_THREAD_CREATE登録集ルーチンにより作成されていないスレッド(つまり、主なスレッドまたは別のプログラム言語で書かれたプログラムによる作成されたスレッド)中のSTOP RUNは、実行中のCBL_THREAD_CREATEすべてが終了するのを待ち、その後、実行単位を終了する。

16.7 STRING(連結)文

STRING(連結)文は、いくつかのデータ項目の内容の一部または全部をつなぎ合わせて、1つのデータ項目を作る。

一般形式

構文規則

  1. 各定数には、任意の表意定数を使用できる。ただし、ALLを除く。

  2. 定数は、すべて文字定数とする。一意名-4を除く一意名はすべて、明示的または暗黙的にUSAGE IS DISPLAYと記述されていなければならない。

  3. 一意名-3は、基本英数字データ項目とする。編集記号またはJUSTIFIED句を伴っていてはならない。

  4. 一意名-4は、整数の基本データ項目とする。その大きさは、一意名-3によって参照される領域の大きさに、1を加えた値を収められるほどでなければならない。一意名-4のPICTURE文字列には、"P" を含めることはできない。

  5. 一意名-1または一意名-2が基本数字データ項目である場合、PICTURE文字列には、"P" が含まれない整数として記述されていなければならない。

  6. 一意名-3を、部分参照してはならない。

  7. 一意名-3を、部分参照できる。

一般規則

  1. 一意名-1と定数-1は、送出し側項目を表わす。一意名-3は、受取り側項目を表わす。

  2. 一意名-2と定数-2は、転記の区切り文字を示す。SIZE指定を書くと、一意名-1または定数-1に指定したデータ項目の内容のすべてが転記される。区切り文字として表意定数を指定すると、それは1文字として扱われる。

  3. 定数-1または定数-2として表意定数を指定すると、暗黙的に用途がDISPLAYである1文字として扱われる。

  4. STRING文が実行されると、下記の規則に従ってデータが転記される。

    1. 英数字間の転記規則に従って、定数-1または一意名-1のデータ項目の内容が一意名-3に転記される。ただし、空白文字の穴埋めは行われない。(手続き部 - MERGE - OPENの章のMOVE(転記)文節を参照。)

    2. SIZE指定を書かずにDELIMITED指定を書くと、一意名-1によって参照されるデータ項目の内容または定数-1の値が受取り側データ項目に移送される。その順序はSTRING文に指定されたとおりであり、左端の文字から始まって左から右へ順に進み、データ項目の末尾に達するか、定数-2に指定された文字が出てくるか、一意名-2の内容によって指定された文字が出て来た時点で終了する。定数-2に指定された文字または一意名-2によって参照されたデータ項目に指定された文字は移送されない。

    3. DELIMITED BY指定にSIZEと書くと、定数-1の値または一意名-1のデータ項目の内容の全体が、一意名-3のデータ項目に転記される。送出し側のすべてのデータが転記されるか、または一意名-3のデータ項目の末尾に達した時点で、この転記処理は終了する。

  5. POINTER指定を書くと、プログラマが一意名-4を明示的に利用できるようになる。この初期値を設定するのは、プログラマの役割である。一意名-4の初期値は、1以上とする。

  6. POINTER指定を書かないと、暗黙的に一意名-4を指定し、その初期値を1としたものとして、以下の一般規則が適用される。

  7. 送出し側項目から受取り側項目に文字列が転記される処理は、文字が1つずつ取り出されて、一意名-3のデータ項目の内の一意名-4の値で示される文字位置に送られるように処理される。次の文字が送られる前に、一意名-4の値が1繰り上げられる。一意名-4の値は、STRING文の上記の処理以外では変えられることはない。

  8. STRING文の実行が終了した時点で、一意名-3の内容が変わっているのは、直接的に転記の対象となった部分だけである。一意名-3のそれ以外の部分には、STRING文を実行する前のデータ内容が残っている。.

  9. 各文字を転記する前の時点で、一意名-4のデータ項目の値が1より小さいか一意名-3のデータ項目の文字数よりも大きいと、それ以上転記は行われない。この場合、

    NOT ON OVERFLOW指定はあっても無視されて、

    STRING文の末尾に制御が移される。ただし、ON OVERFLOW指定があれば、無条件文-1に制御が移される。無条件文-1に制御が移された場合は、その中に記述されている文に関する規則に従って、プログラムの実行が進められる。手続き分岐文あるいは明示的に制御を移行させる条件文が実行されると、その文に関する規則に従って、制御が移される。そうでなければ、無条件文-1の実行が終わると、STRING文の末尾に制御が移される。

  10. STRING文の一般規則に従ってデータの転記が行われた後で、上記の一般規則9に示した状況が発生していなければ、ON OVERFLOW指定はあっても無視されて、STRING文の末尾に制御が移される。ただし、NOT ON OVERFLOW指定があれば、無条件文-2に制御が移される。無条件文-2に制御が移された場合は、その中に記述されている文に関する規則に従って、プログラムの実行が進められる。手続き分岐文あるいは明示的に制御を移行される条件文が実行されると、その文に関する規則に従って、制御が移される。そうでなければ、無条件文-2の実行が終わると、STRING文の末尾に制御が移される。

  11. END-STRING指定はSTRING文の範囲を区切る。(COBOL言語の概念の章の明示範囲符と暗黙範囲符節を参照。)

16.8 SUBTRACT(減算)文

SUBTRACT(減算)文は、いくつかの数字データ項目から1つの数字データ項目または2つ以上の数字データ項目の和を差し引いて、その結果をいくつかのデータ項目に入れる。

一般形式

形式 1

形式 2

形式 3

構文規則

すべての形式
  1. 各一意名は、数字の基本項目とする。ただし、形式 2 では、語GIVINGの後ろの一意名は、数字編集の基本項目であってもよい。形式 3 の一意名は、集団項目でなければならない。

  2. 作用対象を合成したものは、以下の規則に従って決定される。(手続き部の章の算術文節を参照。)

    1. 形式 1では、指定したすべての作用対象が作用対象の合成に用いられる。

    2. 形式 2では、指定したすべての作用対象のうちの語GIVINGの後ろのデータ項目を除いたものが作用対象の合成に用いられる。

    3. 形式 3では、対応するデータ項目の組ごとに別々に作用対象の合成が行われる。
形式 1 および 2
  1. 各定数は、数字定数とする。

  2. 数字データ項目および定数を使えるところでは、どこでも浮動小数点数のデータ項目および定数を使用できる。
形式 3
  1. CORRは、CORRESPONDINGの省略形である。

一般規則

すべての形式
  1. 手続き部の章のROUNDED指定ON SIZE ERROR指定算術文作用対象の重なり算術文における複数個の答の各節を参照。

  2. 計算過程で意味のある桁が失われることのないように、COBOLシステムによって十分な作業領域が確保される。
形式 1
  1. 語FROMの前にあるすべての定数または一意名の和が取られ、一意名-2の現在の値からその和が差し引かれ、その結果が直ちに一意名-2に入れられる。語FROMの後ろに続く各作用対象に対して、それぞれ上記の処理が繰り返される。
形式 2
  1. 形式 2書き方2では、語FROMの前にあるすべての定数または一意名の和が取られ、定数-2または一意名-2の現在の値からその和が差し引かれ、その結果が一意名-3の各データ項目の新しい値として入れられる。
形式 3
  1. 形式 3では、一意名-1に属するデータ項目が一意名-2に属する対応するデータ項目から引かれて、その結果が一意名-2に属する対応するデータ項目に入れられる。

16.9 TRANSFORM(変形)文

TRANSFORM(変形)文は、変形規則に従って文字を変更する。

一般形式

構文規則

  1. 一意名-3は、基本項目でも集団項目でもよい。ただし、用途がDISPLAY以外の数字基本項目を除く。<

  2. 一意名-1と一意名-2は、英字または英数字の基本項目にする。

  3. 文字定数-2または一意名-2の長さは、1文字であるか、または文字定数-1または一意名-1と同じにする。

一般規則

  1. 表意定数-1または表意定数-2を使用することは、同じ値の1文字の文字定数を使用することと等しい。

  2. 一意名-1または一意名-2が、一意名-3と同じ記憶領域を指していると、TRANSFORM処理の結果はどうなるかわからない。(データ部 - ファイルおよびデータ記述の章のREDEFINES(再定義)句節を参照。)

  3. 文字定数-1または一意名-1の中で文字が繰り返されると、TRANSFORM処理の結果はどうなるかわからない。

  4. TRANSFORM文が実行されると、一意名-3の内容が調べられて、一意名-1または文字定数-1に指定した文字が探される。該当する文字が見つかると、一意名-2または文字定数-2の中の対応する文字(または1文字からなる項目の場合はその文字)によって、一意名-3のその部分が置き換えられる。一意名-1または文字定数-1と、一意名-2または文字定数-2との対応関係は、データ項目内の文字位置によって付けられる(左から始まる)。

16.10 UNLOCK(解錠)文

UNLOCK文は、実行単位によってロック(施錠)されている、指定されたファイル中のすべてのレコードのロックを解除(開錠)する。

一般形式

構文規則

ファイル名は、ファイル管理記述項のSELECT文中に定義しておく。

一般規則

  1. ファイル名のファイルは、OPEN文によって既に開かれていること。

  2. UNLOCK文は、実行単位によってロックされている、指定されたファイル中のすべてのレコードのロックを解除する。

16.11 UNSTRING(分解)文

UNSTRING(分解)文は、送出し側項目の連続するデータを分解していくつかの受取り側項目に入れる。

一般形式

構文規則

  1. 各定数は文字定数とする。各定数は表意定数であってもよい。ただし、ALLは除く。

  2. 一意名-1、一意名-2、一意名-3、一意名-5は、明示的または暗黙的に、項類が英数字のデータ項目として記述されていなければならない。

  3. 一意名-4は、英字でも英数字でも数字でもよい。ただし、英字の場合、PICTURE文字列の中に記号文字"B" を含めることはできない。数字の場合は、PICTURE文字列の中に記号文字"P" を含めることはできない。一意名-4の用途は、DISPLAYとする。

  4. 構文規則 2 および 3は適用しない。代わって、下記の規則を適用する。

    1. 一意名-1は、英数字とする。

    2. 一意名-2と一意名-3は、用途をDISPLAYとし、編集されていてはならない。

    3. 一意名-5の用途は、DISPLAYとする。

    4. 一意名-4の用途は、DISPLAYにしてもよい。

    5. 一意名-4は、数字として定義されており正しく転記できるならば、どのような用途のものであってもよい。

  5. 一意名-4は、浮動小数点数項目であってはならない。

  6. 一意名-6と一意名-8は、整数項目とする。このPICTURE文字列の中に、記号文字" P" を含めることはできない。

  7. 一意名-7は整数の基本項目とし、一意名-1のデータ項目の文字数に1を加えた値をもつことができなければならない。このPICTURE文字列の中に、記号文字"P" を含めることはできない。

  8. どの一意名も、88レベルの記述項を指すことはできない。

  9. DELIMITER IN指定およびCOUNT IN指定は、DELIMITED BY指定を書いたときだけ指定できる。

  10. 一意名-1は部分参照できない。

  11. 一意名-1は部分参照できる。

一般規則

  1. 一意名-2と定数-1に関する記述はすべて、それぞれ一意名-3と定数-2およびそれらを反復指定したものに、等しく当てはまる。

  2. 一意名-1は、送出し側を表わす。

  3. 一意名-4は、受取り側を表わす。一意名-5は、区切り文字用の受取り側を表わす。

  4. 一意名-2が参照するデータ項目または定数-1は、区切り文字を指定する。

  5. 一意名-6のデータ項目は、一意名-1のデータ項目のうちで、区切り文字によって分離されて一意名-4のデータ項目に転記された文字数を表わす。区切り文字は、この文字数に入らない。

  6. 一意名-7のデータ項目は、一意名-1のデータ項目中の相対文字位置を表わす。

  7. 一意名-8のデータ項目は、UNSTRING文の実行中に処理の対象となった受取り側データ項目の数を記録するカウンタである。

  8. 区切り文字に表意定数を使用した場合、1文字の文字定数として扱われる。

    ALL指定を書くと、定数-1(文字定数または表意定数)または一意名-2のデータ項目の内容が一意名-1の文字列中に連続して何回か現れても、それが1つのものとして扱われる。そして、一般規則13dの規則に従って、その内容が受取り側に転記される。

  9. 検査中に区切り文字が2つ連続して検出されると、このときの受取り側の項目はそのデータ記述に従って、英字または英数字ならば空白で、数字ならばゼロで満たされる。

  10. 一意名-2が参照するデータ項目の内容、または定数-1には、計算機文字集合中の任意の文字を含めることができる。

  11. 一意名-2が参照するデータ項目または定数-1はそれぞれ、1つの区切り文字を表わす。1つの区切り文字が何文字かで構成されている場合、送出し側の文字列の中で区切り文字として認識されるためには、まったく同じに並んでいなければならない。

  12. DELIMITED BY指定に複数の区切り文字を書くと、各区切り文字は論理和条件"OR"で結ばれる。各区切り文字が、送出し側項目中の文字列と比較される。両者が一致すると、送出し側項目中の文字列のその部分が、1つの区切り文字とみなされる。送出し側項目中のどの文字も、2つ以上の区切り文字の一部とみなされることはない。

    各分離符はUNSTRING文に指定された順序で送出し側フィールドに適用される。

  13. UNSTRING文の実行が開始されると、下記の規則に従って、送出し側の一意名-1のデータ項目から受取り側の一意名-4のデータ項目に、データが転記される。

    1. POINTER指定を書くと、一意名-7のデータ項目の内容によって示される相対文字位置から、一意名-1のデータ項目の文字列の検査が開始される。POINTER指定を書かないと、一意名-1の左端の文字位置から、データ項目の文字列の検査が開始される。

    2. DELIMITED BY指定を書くと、送出し側の文字列の検査は左から右に進められて、定数-1または一意名-2のデータ項目によって示される区切り文字が出てきたところで終了する(一般規則11を参照)。DELIMITED BY指定を書かないと、検査される文字数はそのときの受取り側の大きさと等しくなる。しかし、受取り側の項目の符号が独立であると定義されている場合は、検査される文字数はそのときの受取り側の大きさよりも1つ小さくなる。

      区切り文字が出てくる前に一意名-1のデータ項目の末尾に達すると、最後の文字が検査された時点で検査は終了する。

    3. 検査の結果、対象と判定された文字列(区切り文字が指定されている場合それは含まれない)が、MOVE文の規則に従って、英数字の基本項目として、このときの受取り側に転記される。(手続き部 - MERGE - OPENの章のMOVE(転記)文節を参照。)

    4. DELIMITER IN指定を書くと、区切り文字(列)が英数字の基本データ項目として扱われて、MOVE文の規則に従って一意名-5のデータ項目に転記される。(手続き部 - MERGE - OPENの章のMOVE(転記)文節を参照。) ただし、送出し側の文字列の検査が一意名-1のデータ項目の末尾に達した場合は、一意名-5のデータ項目は空白で埋められる。

    5. COUNT IN指定を書くと、検査の対象となった文字の数(区切り文字が指定されている場合、それは含まれない)が、基本項目転記の規則に従って、一意名-6のデータ項目に転記される。

    6. DELIMITED BY指定を書くと、文字列の検査は区切り文字のすぐ右側の文字から再開される。DELIMITED BY指定を書かないと、文字列の検査は転記の済んだ部分のすぐ右側の文字から再開される。

    7. 一意名-4のデータ項目にデータが転記されると、一意名-4の次の繰り返しデータ項目が新たな受取り側となる。そして、上記の13bから13fの処理が繰り返される。一意名-1のデータ項目中の文字がすべて検査され終わるか、または受取り側の項目がなくなった時点で、この繰り返し処理は終了する。

  14. POINTER指定またはTALLYING指定に関連するデータ項目の内容を初期化しておくことは、プログラマの役割である。

  15. 一意名-7のデータ項目の内容は、一意名-1のデータ項目中で各文字が検査されるごとに、1繰り上げられる。POINTER指定のあるUNSTRING文の実行が終了した時点では、一意名-7のデータ項目の値は、その初期値に一意名-1のデータ項目の検査の対象となった文字数を加えたものになっている。

  16. TALLYING指定のあるUNSTRING文の実行が終了した時点では、一意名-8のデータ項目の値は、その初期値に処理の対象となった受取り側項目の数を加えたものになっている。

  17. 下記のどちらかの場合には、あふれ条件が発生する。

    1. UNSTRING文の実行開始時に、一意名-7のデータ項目の値が1より小さいか、または一意名-1のデータ項目の大きさよりも大きい場合

    2. UNSTRING文の実行中に、受取り側がすべて使われたのに、一意名-1のデータ項目中にまだ検査されていない文字が残っている場合

  18. あふれ条件が発生したときのUNSTRING文の終了処理は、次のようになる。

    NOT ON OVERFLOW指定がある場合は、その指定は無視されて、

    UNSTRING文の末尾に制御が移される。ON OVERFLOW指定がある場合は、無条件文-1に制御が移される。無条件文-1に制御が移された場合は、その中に記述されている文に関する規則に従って、プログラムの実行が進められる。手続き分岐文あるいは明示的に制御を移行させる条件文が実行されると、その文に関する規則に従って、制御が移される。そうでなければ、無条件文-1の実行が終わると、UNSTRING文の末尾に制御が移される。

  19. END-UNSTRING指定は、UNSTRING文の範囲を区切る。(COBOL言語の概念の章の明示範囲符と暗黙範囲符節を参照。)

  20. UNSTRING文の実行中に一般規則17に記述した条件が発生しなかった場合、他の一般規則に従ってデータの転記が済んだ後、UNSTRING文の末尾に制御が移される。ON OVERFLOW指定は、あっても無視される。

    NOT ON OVERFLOW指定がある場合は、無条件文-2に制御が移される。無条件文-2に制御が移された場合は、その中に記述されている文に関する規則に従って、プログラムの実行が進められる。手続き分岐文あるいは明示的に制御を移行させる条件文が実行されると、その文に関する規則に従って、制御が移される。そうでなければ、無条件文-2の実行が終わると、UNSTRINGの末尾に制御が移される。

  21. 一意名に付けられている添字および指標は下記のように評価される。

    1. 一意名-1と一意名-7と一意名-8に関する添字または指標があれば、UNSTRING文を実行した結果としてデータの転記が行われる直前に、1回だけ評価される。

    2. 一意名-2、一意名-3、一意名-4、一意名-5、一意名-6に関する添字または指標があれば、それぞれのデータ項目にデータの転記が行われる直前に評価される。

    3. DELIMITED BY, INTO, DELIMITER IN, COUNT INの各指定に関連する一意名に添字付けがされている場合、区切り文字を探して送出し側項目を検査する直前に1回だけ添字が評価される。

  22. 一意名-1、一意名-2、一意名-3のどれかが、一意名-4、一意名-5、一意名-6、一意名-7、一意名-8のどれかと同じ記憶領域を共有する場合、または一意名-4、一意名-5、一意名-6のどれかが、一意名-7、一意名-8のどれかと同じ記憶領域を共有する場合、または一意名-7と一意名-8が同じ記憶領域を共有する場合、UNSTRING文の実行結果はどうなるかわからない。これらのデータ項目が同じデータ記述に項定義されていたとしても、そのことは変わらない。

16.12 USE(使用)文

USE(使用)文は、入出力誤りを処理するための手続きを指定する。この手続きは、入出力管理システムによって行われる標準の手続きに、更に追加して行うものである。

一般形式

形式 1 (順ファイル、相対ファイルおよび索引ファイル)

形式 2 (レコード順ファイル)

形式 3 (相対ファイルおよび索引ファイル)

構文規則

すべての形式 (すべてのファイル)
  1. 形式 1は、誤りに関する宣言である。

    形式 2 および 3ラベルに関する宣言である。

  2. USE文を記述する場合は、宣言節の見出しの直後から書き始め、終止符(.)に続く空白で止める。.

  3. USE文自体は、実行されることはなく、USE手続きの実行を求める条件を定義するだけである。

  4. USE文の中で明示的または暗黙的に参照されるファイルは、すべて同じ編成または呼出し法のものである必要はない。
形式 1 (順ファイル、相対ファイルおよび索引ファイル)
  1. この形式に従った別々の形の記述中に、同じファイル名が現れてもよい。USE文中に指定したファイル名によって、複数のUSE手続きの実行が同時に要求されるようなことがあってはならない。

    同じ手続き部内の複数のUSE AFTER EXCEPTION手続き中に、同じファイル名が現れてはならない。

  2. ERRORとEXCEPTIONは同義語であり、どちらを使用してもよい。
形式 2 および 3 (レコード順ファイル、相対ファイルおよび索引ファイル)
  1. BEGINNINGとENDINGの指定を両方とも省略すると、BEGINNINGとENDINGが共に指定されたものとみなされる。
形式 2 (レコード順ファイル)
  1. REELとUNITは同義語として扱われる。

  2. FILEとREEL/UNITの指定を両方とも省略すると、FILEとREEL/UNITが共に指定されたものとみなされる。

  3. BEGINNING/ENDINGとFILE/REELの下記の組合わせのそれぞれに対して、任意の1つのファイル名および任意の1つのOPENモードを指定できる。

    BEGINNING FILE
    BEGINNING REEL/UNIT
    ENDING FILE
    ENDING REEL/UNIT

一般規則

すべての形式 (すべてのファイル)
  1. USE手続きの実行が終わると、呼出し元の手順に制御が戻される。

  2. USE手続き内では、非宣言手続きを参照してはならない。逆に、非宣言部分では、宣言部分中の手続き名を参照してはならない。ただし、PERFORM文でUSE文を参照することはできる。

    この制限は無視してもよい。

  3. 呼び出されたがまだ呼び出し元の手順に制御が戻されていないUSE手続きを実行させるような文を、実行してはならない。
形式 1 (順ファイル、相対ファイルおよび索引ファイル)
  1. 指定した手続きは、標準入出力誤り手順が終了した後で、または入出力文中にAT END指定をしなかった場合はAT END条件が検出された時点で、入出力システムによって実行される。

  2. ファイル名-1を明示的に指定した場合は、他のUSE手続きはファイル名-1に適用されない。

  3. GIVINGは注記の目的だけに使用する。
形式 2 および 3 (レコード順ファイル、相対ファイルおよび索引ファイル)
  1. BEGINNING指定を明示的または暗黙的に指定すると、適用可能なOPEN文の実行中に、下記の措置が取られる。

    Open文のモード 措置
    INPUT
    1. 見出しラベルを読む
    2. 開始宣言を実行する
    OUTPUT
    1. 開始宣言を実行する
    2. 見出しラベルを書く
    I/O
    1. 見出しラベルを読む
    2. 開始宣言を実行する
    3. 見出しラベルを書く
    EXTEND
    1. 見出しラベルを読む
    2. 開始宣言を実行する(終わりファイル・ラベルは見出しとして扱われる)
    3. 見出しラベルを書く

  2. ENDING指定を明示的または暗黙的に指定すると、適用可能なCLOSE文の実行中に、下記の措置が取られる。

    Open文のモード 措置
    INPUT
    1. 終わりファイル・ラベルを読む
    2. 終了宣言を実行する
    OUTPUT
    1. 終了宣言を実行する
    2. 終わりファイル・ラベルを書く
    I/O
    1. 終わりファイル・ラベルを読む
    2. 終了宣言を実行する
    3. 終わりファイル・ラベルを書く
    EXTEND
    1. 終了宣言を実行する
    2. 終わりファイル・ラベルを書く

  3. GO TO MORE-LABELS文はそれが現れる宣言手続きの先頭への単純なジャンプとして扱われる。

16.13 WAIT(待機)文

WAIT(待機)文は、現在のスレッドの実行を、目的のスレッドの実行が終了するまで保留する。また、場合によっては、目的のスレッドの実行により返された値を取得するまで保留する。

WAIT文は、イベントが真となるまで実行を保留する。

一般形式

形式 1(スレッド)

形式 2(イベント)

構文規則

形式 1 (スレッド)
  1. スレッドポインタ-1 はUSAGE THREAD-POINTERとして定義しなければならない。

  2. 一意名-1 は、USAGE POINTER として定義されるか、サイズが4バイトでなければならない。一意名-1 は関数一意名であってはならない。

  3. 一意名-2は、4桁以上の長さの整数データ項目として定義しなければならない。

形式 2 (イベント)
  1. イベントポインタ-1 はUSAGE EVENT-POINTERとして定義しなければならない。

一般規則

形式 1 (スレッド)
  1. スレッドポインタ-1は、IDENTIFIED BY指定を含むSTART文または、CBL_THREAD_登録集から返されたスレッドハンドルを含んでいなければならない。

  2. WAIT文が正常に動作すると、スレッドポインタ-1に含まれるスレッドハンドルが参照するスレッドが終了するまで、現在のスレッドが実行されない。

  3. RETURNING指定を使用すると、正常に動作するWAIT文により、一意名-1の値が返される。

  4. WAIT文が正常に動作した後は、スレッドポインタ-1に含まれるスレッドハンドルは無効となる。

  5. STATUS指定を使用すると、WAIT文の実行により、CBL_THREAD_登録集ルーチンに対して指定された戻り符号のどれかが、一意名-4中に配置される。

  6. WAIT文が正常に動作しなかった場合、一意名-2が指定されていれば、そこにCBL_THREAD_登録集ルーチンに対して指定された戻り符号のどれかが配置される。さらに、以下のいずれかが行われる。

    1. ON EXCEPTION指定を使用した場合、制御が無条件文-1に渡される。その後、無条件文-1で指定された各文の規則に従って実行が継続される。手続きの分岐、または制御の移動を明示的に指示する条件文が実行された場合は、制御が文の規則に従って渡される。そうでない場合は、無条件文-1 の実行が完了すると同時に、WAIT文の最後に制御が渡され、NOT ON EXCEPTION指定が使用されていても無視される。

    2. 上記以外の場合で、NOT ON EXCEPTION指定またはSTATUS指定を使用した場合は、WAIT文の最後に制御が渡され、NOT ON EXCEPTION指定が使用されていても無視される。

    3. 上記以外の場合は、実行時システムエラーとともに実行単位が終了する。

  7. WAIT文が正常に実行された場合は、以下が記載された順序通りに行われる。

    1. STATUS指定を使用した場合は、ZEROが一意名-2に転記される。

    2. NOT ON EXCEPTION指定を使用した場合は、制御が無条件文-2に渡される。 その後、無条件文-2 で指定された各文の規則に従って、実行が続行される。手続きの分岐、または制御の移動を明示的に指示する条件文が実行された場合は、制御が文の規則に従って渡される。そうでない場合は、無条件文-2 の実行が完了すると同時に、WAIT文の最後に制御が渡され、ON EXCEPTION指定が使用されていても無視される。

形式 2 (イベント)
  1. WAIT文が正常に動作すると、イベントポインタ-1が参照するイベントが真となるまで、実行が保留される。

注:文が実行されたとき、イベントポインタ-1 が参照するイベントが真であった場合は、実行がただちに再開される。


  1. WAIT文が正常に動作しなかった場合、実行時システムエラーとともに実行単位が終了する。

16.14 WRITE(書き出し)文

WRITE(書き出し)文は、論理レコードを出力ファイルまたは入出力両用ファイルに書き出す。順ファイルに関しては、論理ページ内での縦方向の行の位置付けにもWRITE文を使用できる。

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

一般形式

形式 1 (レコード順ファイル
dialm.gifおよび行順ファイル)

形式 2 (レコード順ファイル)

形式 3 (レコード順ファイル)

形式 4 (相対ファイルおよび索引ファイル)

指令とランタイム・スイッチ

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

  2. 下記のランタイム・スイッチによって、この項に記述した意味が影響を受ける可能性がある。

構文規則

すべての形式 (すべてのファイル)
  1. 一意名-1が関数一意名である場合は、英数字関数を参照すること。一意名-1が関数一意名でない場合は、レコード名と一意名-1が同じ記憶領域を指してはならない。

  2. レコード名は、データ部のファイル節内の論理レコードの名前であり、修飾してもよい。

  3. レコード名に、浮動小数点数項目を指定してもよい。

  4. 一意名-1は、浮動小数点数項目として定義してもよい。
形式 1 (レコード順ファイル)
  1. 特殊名段落に記述すると、TABの代わりに、利用者が定義した呼び名を使用できる。(環境部の章の特殊名段落節を参照。)

  2. ADVANCING指定中に一意名-2を使用する場合、一意名-2は基本整数データ項目の名前とする。

  3. 整数または一意名-2のデータ項目の値は、ゼロであってもよい。

  4. 整数は符号付きでもよい。

  5. END-OF-PAGE指定をした場合、該当するファイルのファイル記述項中にLINAGE句を指定する。

  6. 語、END-OF-PAGEとEOPは同義語である。

  7. ファイル記述項にLINAGE句を指定したファイルにレコードを書き出すときは、ADVANCING呼び名指定をすることはできない。

  8. 1つのWRITE文中に、ADVANCING PAGEとEND-OF-PAGEを共に指定してはならない。

    この制限は無視してよい。

    呼び名の代わりに、それに相当する機能名を使用してもよい。

形式 2 (レコード順ファイル)
  1. ファイル記述項にLINAGE句を指定したファイルにレコードを書き出すときは、この形式は使用できない。

  2. あるファイルにレコードを書き出すためにこの形式のWRITE文を使用する場合、そのファイルに適用するWRITE文はすべてこの形式にする。

  3. AFTER POSITIONING指定に使用する一意名-2は、1文字の英数字項目として定義しておく。(指定できる値については、一般規則18を参照)
形式 4 (相対ファイルおよび索引ファイル)
  1. 該当するファイルに適用できるUSE手続きを指定しなかった場合、INVALID KEY指定をする。

    この規則は強制しない。

一般規則

すべての形式 (すべてのファイル)
  1. FROM指定をしたWRITE文を実行することは、下記の順に処理を行うことと同じである

    1. MOVE文の規則に従って、下記の文を実行する。
           MOVE 一意名-1 TO レコード名
    2. FROM指定をしない同じWRITE文を実行する。

    暗黙のMOVE文を実行する前のレコード領域の内容は、このWRITE文の実行には影響を及ぼさない。

    WRITE文の実行が終了した後で、レコード領域のデータは利用できなくなることがあるが、一意名-1のデータはそのまま残っている。(一般規則13を参照)

  2. ファイル位置指示子は、WRITE文の実行の影響を受けない。

  3. WRITE文を実行すると、その対象のファイルに対応するFILE STATUSデータ項目を指定してあれば、それが更新される。(手続き部入出力状態節を参照。)

  4. ファイル中のレコードの最大の大きさは、ファイルを作成したときに決定される。この大きさを後で変更してはならない。

  5. ファイル中の論理レコードを格納する大記憶装置上の文字位置の数は、そのレコードの論理記述に定義した文字位置の数と、等しくてもよいし異なっていてもよい

  6. WRITE文が実行されると、論理レコードが書き出される。

  7. WRITE文の実行が不成功に終わると、レコード名に対応するファイルの入出力状態が更新される。次いで、そのファイルに適用できるUSE AFTER EXCEPTION手続きが指定してあればその手続きが実行され、その後でUSE文の規則に従って制御が移される。(前述のUSE(使用)文節を参照。)
形式 1 (レコード順ファイル)
  1. TABに関連づけられた呼び名が指定されている場合、用紙の標準の垂直タブ位置へと移動する結果となる。

  2. END-OF-PAGE指定をしたWRITE文の実行中に印刷プログラムの論理的な末尾に達すると、END-OF-PAGE指定中の無条件文-1が実行される。論理ページの大きさは、該当ファイルに関するファイル記述中の、該当レコードのLINAGE句に指定する。

  3. LINAGE句を指定してあると、WRITE文を実行した結果LINAGE句の整数-2またはデータ名-2のデータ項目に定義した値以上にLINAGE-COUNTERの値が達すると、END-OF-PAGE指定をしたWRITE文が実行されたときにページ終了条件が発生する。この場合、書き出し操作に続いて、そのWRITE文のEND-OF-PAGE指定中の無条件文が実行される。

    WRITE文(END-OF-PAGE指定があってもなくても)の実行結果が現在のページ本体に収まりきらないときは、自動的にページあふれ条件が発生する。

    ページあふれ条件とは、WRITE文を実行すると、LINAGE句の整数-2に指定した値またはデータ名-2に指定したデータ項目の値をLINAGE-COUNTERの値が超えることである。ページあふれが発生する場合、レコードの書き出しと改ページのどちらを先にするかは、BEFOREとAFTERのどちらを指定したかによる。改ページされると、装置はLINAGE句の指定に従って、次の論理ページの最初の行に位置付け直される。END-OF-PAGE句中に無条件文を指定してあると、レコードの書き出しと装置の位置付け直しが済んだ後で、その無条件文が実行される。

    LINAGE句に整数-2もデータ名-2にも指定していないと、ページあふれ条件とは別にページ終了条件が発生することはない。この場合、ページあふれ条件とページ終了条件は同時に発生する。

    LINAGE句に整数-2またはデータ名-2を指定してある場合で、WRITE文を実行したときに、LINAGE句の整数-2に指定した値またはデータ名-2に指定したデータ項目の値、およびLINAGE句の整数-1に指定した値またはデータ名-1に指定したデータ項目の値の両方を、LINAGE-COUNTERの値が同時に超えるときは、整数-2またはデータ名-2は指定されてないように処理は進められる。

形式 1 (行順ファイル)
  1. ADVANCING指定をしないと、使用しているオペレーティングシステムのテキスト・エディタの方式に従って、自動的に1行が行送りされる(通常はBEFORE ADVANCING 1 LINEが想定される)。

  2. 順ファイルの外部的に定義されている境界を超えて書き出しを行おうとすると、例外条件が発生する。このとき、レコード領域の内容は影響を受けず、下記の例外処理が行われる。

    1. 該当するファイルに対応するFILE STATUSデータ項目を指定してあると、その値が区域外書き出しを表わすように設定される。(手続き部入出力状態節を参照。)

    2. 該当するファイルに適応できるUSE AFTER STANDARD EXCEPTION宣言を明示的または暗黙的に指定してあると、その宣言手続きが実行される。

    3. 該当するファイルに適応できるUSE AFTER STANDARD EXCEPTION宣言を明示的にも暗黙的にも指定してないと、結果はどうなるかわからない。

  3. 複数の物理リール/ユニットにまたがる出力ファイルのリール/ユニットの終わりが検出されると、WRITE文は下記の操作を行う。

    1. 標準のリール/ユニット終了手続き

    2. リール/ユニットの交換手続き

    3. 標準のリール/ユニット開始手続き

  4. レコード長が固定のファイルに長さの異なるレコードを再定義して収めている場合、バッファ領域全体がファイルに書き込まれることを知っている必要がある。したがって、現在のレコードが前のレコードよりも短い場合には、空白を埋める必要がありうる。

  5. NOT END-OF-PAGE指定をしたWRITE文の実行が正常に進み、その間にページ終了条件が発生しないと、入出力処理の後で制御は無条件文-2に移される。

形式 1 (レコード順ファイル
dialm.gifおよび行順ファイル)
  1. ADVANCING指定およびEND-OF-PAGE指定は、共に印刷ページ上での各行の縦方向の位置を制御する働きをする。

    ADVANCING指定をしないと、リスト装置(PRINTERまたはPRINTER-1)に向けて出力されたときに、AFTER ADVANCING 1 LINEを指定してあったかのように、自動的に行送りされる。ADVANCING指定をすると、下記のように行送りされる。

    1. 一意名-2を指定すると、その現在の値に等しい行数だけ、印刷ページ上で行送りされる。

    2. 整数を指定すると、その値に等しい行数だけ、印刷ページ上で行送りされる。

    3. 呼び名を指定すると、環境部の章の特殊名段落節に指定した内容に従って、行送りされる。

    4. BEFORE指定を使用すると、該当する行が出力された後に、上記のa, b, cの規則に従って行送りされる。

    5. AFTER指定を使用すると、上記のa, b, cの規則に従って行送りされた後で、該当する行が出力される。

    6. PAGEを指定すると、装置が(使用された指定により)前または次の論理ページに位置付け直される。該当する行の出力と改ページのファイル記述項中にLINAGE句を指定してあるレコード順ファイルにレコードを書き出すと、 LINAGE句の指定に従って、装置は次の論理ページ上に書き出し可能な最初の行に位置付け直される。

  2. 1つのWRITE文中に、ADVANCINGとEND-OF-PAGEを共に指定してはならない。
形式 1、2、および 3 (順ファイル)
  1. WRITE文を実行するときは、対象ファイルをOUTPUTモードまたはEXTENDモードで開いておく。(手続き部 - MERGE - OPENの章のOPEN(開く)文節を参照。)

  2. WRITE文の実行によって書き出された論理レコードは、レコード領域内で利用できなくなる。ただし、SAME RECORD AREA句中に該当するファイルを指定してある場合、または区域外書き出しのためにWRITE文の実行が不成功に終わった場合は、そのレコード領域は元のまま残っている。

    SAME RECORD AREA句を指定してある場合、論理レコードは レコード名に対応するファイルのものとしてだけではなく、SAME RECORD AREA句中に指定した他のファイルのレコードとしても使用できる。

形式 2 (レコード順ファイル)
  1. WRITE文中にAFTER POSITIONING指定をすると、システムはレコードの先頭の文字位置に適切な文字を転記してから、レコードをファイルに書き出す。このため、この先頭の文字位置は空けておくこと。AFTER POSITIONINGに一意名-2を指定をすると、その値がレコードの先頭の文字位置に転記される。その値は下記のどれかとする。

    一意名-2
    意味
    (空白) 1行改行
    0 2行改行
    - 3行改行
    + 改行なし
    1-9 それぞれ、チャネル1-9へ飛ぶ
    A, B, C それぞれ、チャネル10, 11, 12へ飛ぶ
    V, W ポケット1または2を選択

    AFTER POSITIONINGに整数を指定をすると、出力レコードの先頭に転記される文字は下記のようになる。

    整数
    出力文字
    意味
    0 1 チャネル1へ飛ぶ
    1 (空白) 1行改行
    2 0 2行改行
    3 - 3行改行

  2. END-OF-PAGE指定は、指定しても注記になり、実行されることはない。

形式 3 (レコード順ファイル)
  1. 順ファイルの外部的に定義されている境界を超えて書き出しを行おうとすると、無効キー条件が発生する。COBOLシステムによって無効キー条件が検出されると、WRITE文の実行は不成功に終わる。このとき、レコード領域の内容は影響を受けない。該当するファイルに対応するFILE STATUSデータ項目を指定してあると、その原因を表わす値がその項目に設定される。実行 は、無効キー条件に関する規則に従って続行される。(手続き部の章の入出力状態節を参照。)
形式 4 (相対ファイルおよび索引ファイル)
  1. WRITE文を実行するとき、対象ファイルをOUTPUT, I-O, EXTENDのどれかのモードで開いておく。索引ファイルを順呼出し法で処理する場合、 入出力モードで開いてはならない。(環境部の章のファイル管理記述項および手続き部 - MERGE - OPENの章の章のOPEN(開く)文節を参照。)

  2. WRITE文の実行によって書き出された論理レコードは、SAME RECORD AREA句中に該当するファイルを指定してある場合、または無効キー条件のためにWRITE文の実行が不成功に終わった場合にだけ、引続きレコード領域内のものが利用できる。

    SAME RECORD AREA句を指定してある場合、論理レコードは、 レコード名に対応するファイルのものとしてだけではなく、SAME RECORD AREA句中に指定した他のファイルのレコードとしても使用できる。

  3. 無効キー条件が検出されると、WRITE文の実行は不成功に終わる。このとき、レコード領域の内容は影響を受けない。該当するファイルに対応するFILE STATUSデータ項目を指定してあると、その原因を表わす値がその項目に設定される。 実行は、 無効キー条件に関する規則に従って続行される。(手続き部の章の入出力状態節を参照。)

形式 4 (相対ファイル)
  1. 出力モードで開いたファイルに関しては、下記のどちらかの方法でレコードを書き出すことができる。

    1. 順呼出し法を採る場合、WRITE文によってレコードが書き出される。最初に書き出されるレコードの相対レコード番号は1番とされ、以降レコードが書き出される順に相対レコード番号が1つずつ繰り上げられる。該当するファイルのファイル管理記述項にRELATIVE KEYデータ項目を指定してあると、WRITE文の実行中に書き出されたレコードの相対レコード番号がオペレーティングシステムによってRELATIVE KEYデータ項目に収められる。

    2. 乱呼出し法または動的呼出し法を採る場合、WRITE文を実行するのに先立って、プログラム中でRELATIVE KEYデータ項目に相対レコード番号を設定しておく。つまり、レコード領域中のレコードをRELATIVE KEYデータ項目に関係付けておく。次いで、WRITE文を実行することによって、そのレコードがファイルに書き出される。

  2. 入出力両用モードで開き、乱呼出し法または動的呼出し法で処理するファイルに関しては、レコード領域中のレコードを書き出す先の相対レコード番号をランタイム要素中でRELATIVE KEYデータ項目に設定しておく。次いで、WRITE文を実行すると、そのレコード領域の内容がファイルに書き出される。

  3. 下記の場合に、無効キー条件が発生する。

    1. 乱呼出し法または動的呼出し法を採る場合、RELATIVE KEYデータ項目が指すレコードが既に存在する。

    2. 外部的に定義されているファイル境界を超えて、レコードの書き出しが試みられた。
形式 4 (索引ファイル)
  1. WRITE文を実行すると、レコード領域の内容が書き出される。オペレーティングシステムはレコードキーの内容を使用して、以降どのレコードキーを通じてでもそのレコードを呼び出すことができるようにする。

  2. 主レコードキーの値は、ファイル中の全レコードを通じて一意とする。

  3. 主レコードキーに指定したデータ項目は、WRITE文を実行するのに先立って、ランタイム要素中で希望する値に設定しておく。

  4. 順呼出し法でファイルを処理する場合、主レコードキーの値の昇順に順次レコードを書き出すこと。

  5. 乱呼出し法または動的呼出し法を採る場合、任意の順序でレコードを書き出せる。

  6. 索引ファイルのファイル管理記述項にALTERNATE RECORD KEY句を指定した場合、併せてDUPLICATES指定をしてあれば、副レコードキーの値は一意でなくてもよい。副レコードキーの値が重複する場合、オペレーティングシステムは、それらが書き出された順に呼び出されるようにする。

  7. 下記のどれかの場合に、無効キー条件が発生する。

    1. 出力モードで開いたファイルに順呼出し法を適用しているとき、前に書き出したレコードの主レコードキーの値よりも、書き出そうとするレコードの主レコードキーの値が大きくない。

    2. 出力モードまたは入出力両用モードで開いたファイルの場合、書き出そうとするレコードと主レコードキーの値が等しいレコードが、ファイル中に既に存在する。

    3. 出力モードまたは入出力両用モードで開いたファイルの場合、キーの重複を許していないのに、書き出そうとするレコードと副レコードキーの値が等しいレコードが、ファイル中に既に存在する。

    4. 外部的に定義されたファイル境界を超えて、レコードの書き出しが試みられた。

  8. WRITE文の実行が正常にまたは不成功に終わった後、制御がどのように移されるかは、INVALID KEY指定とNOT INVALID指定の有無に左右される。(手続き部の章の無効キー条件節を参照。)

16.15 XML PARSE(XML解析)文

XML PARSE(XML解析)文は、COBOL実行時システムの一部であるXMLパーサとのインターフェイスに使用される。XML PARSE文は、XML文書を各部に分けて解析し、各部を1つずつ、利用者が書いた処理手続きへと渡す。

一般形式

構文規則

  1. 一意名-1は英数字または各国語型データ項目でなければならず、関数一意名であってはならない。また、XML文書文字ストリームを含んでいるものとする。一意名-1 が各国語型データ項目の場合、その内容は、CCSID 1200 (Unicode UTF-16)を使用して符号化されていなければならない。ここには、複数の符号化単位を使用して表示された文字が含まれてはならない。そのような文字を表示するには、"" や""などの文字参照を使用すること。

  2. 手続き名-1は、処理手続き中の最初または唯一の節または段落を指定する。

  3. 手続き名-2は、処理手続き中の最後の節または段落を指定する。

一般規則

  1. PROCESSING PROCEDURE指定は、XMLパーサが生成するさまざまなイベントを取り扱う手続きの名前を指定する。この処理手続きは、XMLイベントを取り扱う文により構成される。処理手続きの範囲には、この手続き中のCALL、EXIT、GO TO、GOBACK、INVOKE、およびPERFORMの各文により実行されるすべての文も含まれる。処理手続きの最後の文の後には、コンパイラにより、戻る仕組みが挿入される。処理手続きは、STOP RUN文で実行単位を終了することができるが、GOBACK文またはEXIT PROGRAM文でパーサへ戻ろうとしてはならない。

  2. ON EXCEPTION指定は、XML PARSE文が例外条件を挙げたときに、実行される無条件文を指定する。例外条件は、XML文書の処理中に、XMLパーサがエラーを検出したときに発生する。パーサはまず、"EXCEPTION"を含むよう設定された特殊レジスタ XML-EVENTとともに、処理手続きに制御を渡して、例外XMLイベントを知らせる。そして、特殊レジスタ XML-CODEに数字エラーコードを与える。この詳細については、COBOL言語の概念の章の特殊レジスタ節の表 2-2を参照。

    例外条件はまた、処理手続きが、正常なXMLイベントからパーサに戻る前に、XML-CODE を -1 に設定して、故意に解析を終了した場合も発生する。この場合、パーサはEXCEPTION XMLイベントを知らせず、以下が適用される。

    1. ON EXCEPTION指定を使用した場合、パーサは制御を無条件文-1に移す。

    2. ON EXCEPTION指定を使用しない場合、NOT ON EXCEPTION指定が使用されていても、無視され、制御はXML PARSE文の最後に移される。

    3. XML処理手続きが例外XMLイベントを取り扱い、パーサに制御を返す前にXML-CODEをゼロに設定した場合、例外条件は存在しない。

    4. 取り扱われない例外が他に発生せずにパーサが終了した場合は、制御がNOT ON EXCEPTION指定の無条件文-2に移される。ただし、この無条件文-2を指定した場合に限る。

  3. NOT ON EXCEPTION指定は、XML PARSE処理の終了時に例外条件がまったく存在しないときに実行される無条件文を指定する。以下の規則が適用される。

    1. 例外条件がXML PARSE処理の終了時にまったく存在しない場合は、制御がNOT ON EXCEPTION 指定の無条件文-2に移される。ただし、この無条件文-2を指定した場合に限る。

    2. NOT ON EXCEPTION指定を使用しない場合、制御はXML PARSE文の最後に移される。 この場合、ON EXCEPTION指定が使用されていても、無視される。特殊レジスタ XML-CODEは、XML PARSE文の実行後にゼロを含む。


Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標および商品名は国際法によって保護されています。


Previous 手続き部 - PERFORM - ROLLBACK オブジェクトCOBOL言語拡張 Next