SET(設定)文

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

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

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

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

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

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

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

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

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

NET SET文を使用して、.NETネイティブ配列のサイズを変更できる。

NET SET文を使用して、.NETネイティブ配列の内容を初期化し、それらの内容にもとづき配列サイズを設定できる。

NET SET文を使用して、すでに扱っているCONDITION-VALUEを伴うブール・データ項目の値を変更できる。

NETSET文を使用して、.NETネイティブ型を伴うデータ項目の値を変更できる。

一般形式

形式 1

形式 2

形式 3

形式 4

形式 5

形式 6

形式 7

形式 8

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

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

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

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

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

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

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

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

形式 17 (配列のサイズ)

形式 18 (配列の内容)

形式 19 (ブール値の設定)

形式 20 (.NETデータの設定)

指令

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

    • STICKY-LINKAGE - SET文によってポインタ・データ項目に入れられたデータ項目の番地を、副プログラムの呼出しの間に保持しておくか否かを決定する。

構文規則

すべての形式
  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を参照するIMPLEMENT句で記述されていなければならない。

    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を含むデータ項目として定義しなければならない。

NET 形式 17 (配列のサイズ)
  1. NET一意名-12は、形式3 OCCURS句に対して記述されなければならない。

  2. NET一意名-13は、整数値を記述しなければならない。

  3. NETTO句の後のオペランド数は、 一意名-12に対して指定されたディメンジョンの数を超えてはならない。

NET 形式 18 (配列の内容)
  1. NET一意名-14は、一次元の配列または二次元の配列のいずれかとして、形式3 OCCURS句に対して記述されなければならない。 

  2. NET定数-2は、記述項の左辺を記述するVALUE句に対し有効な定数でなければならない。 

  3. NET丸括弧を定数-2の反復の範囲内で用いて、値をサブ配列に分割してもよい。

NET 形式 19 (ブール値の設定)
  1. NET一意名-15 と一意名-16は、すでに扱っているCONDITION-VALUEを持たなければならない。

  2. NET条件名-2と条件名-3は、条件付き変数と関連づけなければならない。 

  3. NET条件名-2が指定され、TRUE指定が指定されない場合は、FALSE指定は、条件名-2に対するデータ記述項のVALUE句の中で指定されなければならない。 

NET 形式 20 (.NETデータの設定)
  1. NET一意名-17は、受取り側項目である。

  2. NET一意名-18、定数-3または算術式-1は、送出し側項目である。

  3. NETSET文は、以下のいずれかが真実であれば、正当である:
    • 送出し側項目と受取り側項目が、両方とも、数字である。
    • 一意名-17 および一意名-18は、同じクラスのオブジェクトである。
    • 一意名-18のクラスは、直接的または間接的に、一意名-17のクラスから継承している。 
    • 一意名-17は、インターフェイスに適合し、一意名-18は、そのインターフェイスを実行する。
    • 一意名-18のクラスから一意名-17のクラスを伴う項目に対して暗黙変換演算子がある。
    • 一意名-17は、英数字または各国語文字とする。

一般規則

形式 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が参照するものと同じセマフォデータ項目を参照するように設定される。

NET形式 17 (配列のサイズ)
  1. NETSET文によって、一意名-12によって記述された.NET配列のサイズを、一意名-13によって参照されたデータ項目の内容または整数-5の値に設定できる。

NET形式 18 (配列の内容)
  1. NETSET文によって、定数-2の反復によって指定される値を含むのに必要とされるサイズの.NET配列を生成し、当該配列を指定された値に設定できる。  

NET形式 19 (ブール値の設定)
  1. NET 一意名-15または条件項目-2によって参照されたデータ項目の内容を、一意名-16、条件名-3、またはTRUE or FALSEによって参照されたデータ項目の内容に設定できる。

NET形式 20 (.NETデータの設定)
  1. NET一意名-17が英数字または各国語文字の場合、ToStringメソッドが自動的に送出し側項目上で呼び出され、その結果生じる文字列は一意名-17によって参照されたデータ項目へと移動する。ToStringメソッドは、System.Objectにおいて実行されているので、どのクラスにも対応していることに留意しておく。 

  2. NET送出し側項目が受取り側項目へと移動させられる。