SET ステートメントは、次に示す処理のいずれかを実行するために使用されます。
指標名は、 OCCURS 文節の INDEXED BY 句を通して付与されたテーブルと関連付けられています。プログラムでさらに定義されることはありません。
SET ステートメントの中で、 送り出しフィールドと受け取りフィールドがそれらのストレージの一部を共用している場合 (つまり、オペランドのオーバーラップがあると)、SET ステートメントを実行した結果は未定義のままです。
この形式の SET ステートメントを実行すると、受け取りフィールドの現行値が、送り出しフィールドの値を変換した値で置き換えられます。
| フォーマット 1: SET (基本的なテーブル処理) |
|---|
|
OCCURS 文節の INDEXED BY 句で指定した指標に名前を付ける必要があります。
指標データ項目または基本数字整数項目のいずれかを指定する必要があります。受け取りフィールドをウィンドウ化日付フィールドにすることはできません。
OCCURS 文節の INDEXED BY 句で指定した指標に名前を付ける必要があります。 SET ステートメントが実行される前の指標値は、関連付けられたテーブルの出現数に対応する必要があります。
指標データ項目または基本数字整数項目のいずれかを指定する必要があります。送り出しフィールドをウィンドウ化日付フィールドにすることはできません。
これは、正の整数である必要があります。
以下の表は、フォーマット 1 の SET ステートメントにおける 送り出しフィールドと受け取りフィールドの有効な組み合わせを示しています。
| 送り出しフィールド | 指標名
受け取りフィールド |
指標データ項目受け取りフィールド | 整数データ項目受け取りフィールド |
|---|---|---|---|
| 指標名* | 有効 | 有効** | 有効 |
| 指標データ項目* | 有効** | 有効** | 無効 |
| 整数データ項目 | 有効 | 無効 | 無効 |
| 整数リテラル | 有効 | 無効 | 無効 |
| *指標名とは、OCCURS 文節の INDEXED BY 句で指定した指標を指します。指標データ項目は、
USAGE IS INDEX 文節を使用して定義されます。
**変換は何も行われません。 |
|||
受け取りフィールドは、指定されている順に左から右へと処理されます。 ID-1 に関連付けられた添え字付けまたは指標付けがある場合には、受け取りフィールドが処理される直前に評価されます。
送り出しフィールドで使用される値は、 SET ステートメントの実行開始時の値です。
SEARCH ステートメントまたは PERFORM ステートメント実行後の指標の値は未定義となることがあります。したがって、他のテーブル処理操作を行う前に、フォーマット-1 SET ステートメントでそのような指標を再初期設定してください。
指標名-2 が、OCCURS DEPENDING ON 文節を含む従属項目を持つテーブルに対するものである場合には、 未定義の値が ID-1 に受け取られる可能性があります。
複合 OCCURS DEPENDING ON の詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。
この形式の SET ステートメントを実行すると、受け取り指標値が送り出しフィールド内の値に対応する値だけ増加 (UP BY) または減少 (DOWN BY) します。
| フォーマット 2: SET (指標の調整) |
|---|
|
受け取りフィールド は、指標名-3 により指定された指標です。指標値は、SET ステートメント実行前も実行後も、関連するテーブル内の出現数に対応する必要があります。
送り出しフィールド は、ID-3 または整数-2 として定義することができます。そして、ID-3 は基本整数データ項目、整数-2 はゼロ以外の整数である必要があります。ID-3 をウィンドウ化日付フィールドにすることはできません。
フォーマット 2 の SET ステートメントが実行されると、受け取りフィールドの内容が、ID-3 または整数-2 の値で表される発生数に対応する値だけ、増加 (UP BY) または減少 (DOWN BY) します。受け取りフィールドは、指定されている順に左から右へと処理されます。 SET ステートメントの実行開始時の増加するフィールド値または減少するフィールド値が、すべての受け取りフィールドにおいて使用されます。
指標名-3 が、 OCCURS DEPENDING ON 文節を含む従属項目を持つテーブルに対するものである場合、また ODO のオブジェクトが、フォーマット 2 の SET ステートメントの実行前に変更される場合、指標名-3 には、関連するテーブルの発生数に相当する値が入りません。
複合 OCCURS DEPENDING ON の詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。
この形式の SET ステートメントが実行されると、指定された簡略名に関連する外部スイッチの各状況が、 ON または OFF に切り替わります。
| フォーマット 3: SET (外部スイッチ) |
|---|
|
この形式の SET ステートメントを実行すると、 条件名に関連する値が VALUE 文節の規則に従って条件変数の中に入れられます。
| フォーマット 4: SET (条件名) |
|---|
|
条件名-1 の VALUE 文節の中で複数のリテラルが指定されている場合には、 関連付けられた条件変数は、最初のリテラルに等しく設定されます。
複数の条件名を指定すると、 その実行結果は、それらの条件名が SET ステートメントの中で指定されている順に、 各条件名に関して個別の SET ステートメントを記述したものと同じになります。
この形式の SET ステートメントを実行すると、受け取りフィールドの現行値は、 送り出しフィールドの中にあるアドレス値によって置き換えられます。
USAGE IS POINTER として記述されている必要があります。
ID-5 は、リンケージ・セクションの中に定義されたレベル 01 またはレベル 77 の項目である必要があります。これらの項目のアドレスは、TO 句の中に指定されたオペランドの値に設定されます。
ID-5 は、参照変更にすることはできません。
USAGE IS POINTER として記述されている必要があります。
プログラム自体の working-storage section、file section、または local-storage section 内にアドレスを含めることはできません。
受け取りフィールドが、無効なアドレスの値を含むように設定します。
以下の表は、フォーマット 5 の SET ステートメントにおける 送り出しフィールドと受け取りフィールドの有効な組み合わせを示しています。
| 送り出しフィールド | USAGE IS POINTER 受け取りフィールド | ADDRESS OF
受け取りフィールド |
NULL/NULLS
受け取りフィールド |
| USAGE IS POINTER | 有効 | 有効 | 無効 |
| ADDRESS OF | 有効 | 有効 | 無効 |
| NULL/NULLS | 有効 | 有効 | 無効 |
このフォーマットの SET ステートメントを実行すると、受け取りフィールドの現行値は、 送り出しフィールドで指定されたアドレス値によって置き換えられます。
実行時、関数ポインターとプロシージャー・ポインターでは、COBOL プログラムの 1 次入り口点のアドレス、 COBOL プログラムの代替入り口点のアドレス、または COBOL 以外のプログラムの入り口点のアドレスを参照できます。これらは NULL の場合もあります。
COBOL で C 関数と相互運用を行う場合は、プロシージャー・ポインターよりも関数ポインターのほうが簡単に使用できます。
ID-8 またはリテラル-1 は、 以下に示す種類の入り口点の 1 つを参照する必要があります。
SET...TO ENTRY ステートメントが参照するプログラム名は、 PGMNAME コンパイラー・オプションの影響を受けることがあります。詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。
以下の例では、 関数ポインターをサービスに戻す C 関数への COBOL CALL を説明しており、 サービスへの COBOL CALL が続きます。
IDENTIFICATION DIVISION.
PROGRAM-ID DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FP USAGE FUNCTION-POINTER.
PROCEDURE DIVISION.
CALL “c-function” RETURNING FP.
CALL FP.
このフォーマットの SET ステートメントを実行すると、受け取り項目の値は 送り出し項目の値によって置き換えられます。
オブジェクト・リファレンス ID-1 およびオブジェクト・リファレンス ID-2 として定義する必要があります。オブジェクト・リファレンス ID-1 は受け取り項目、オブジェクト・リファレンス ID-2 は送り出し項目です。オブジェクト・リファレンス ID-1 が特定クラスのオブジェクト・リファレンスとして定義される (「USAGE OBJECT REFERENCE クラス名」として定義される) 場合、オブジェクト・リファレンス ID-2 は、同じクラスの、またはそのクラスから派生するオブジェクト・リファレンスである必要があります。
表意定数 NULL が指定される場合、受け取りオブジェクト・リファレンス ID-1 は NULL 値に設定されます。
SELF が指定される場合、 SET ステートメントが、メソッドの手続き部に表示されなければなりません。 オブジェクト・リファレンス ID-1 は、現在実行中のメソッドが呼び出されたオブジェクトを参照するように設定されます。