COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

26.2.5 VARIANT値とCOBOLデータのやり取り

<この項の構成>
(1) 暗黙的な変換
(2) 変換しない場合
(3) VARIANT値の解放
(4) 明示的な変換
(5) バリアントデータ項目の設定
(6) バリアントデータ項目にEXTERNAL句を指定する場合

(1) 暗黙的な変換

Excelのシートのセルに数値が設定されているときに,このセルから値を取得し,SET文を使ってCOBOLの数値項目で値を受け取る例を次に示します。このとき,VARIANT値からCOBOLのデータに暗黙的なデータ変換が行われます。

VARIANT値の概念については,マニュアル「COBOL2002 言語 拡張仕様編 18.1.1 言語の概念(OLE2オートメーションインタフェース機能)」を参照してください。

暗黙的な変換の例
       WORKING-STORAGE SECTION.
       01 AP-OBJ USAGE OBJECT REFERENCE OLE.
       01 CDATA-NUM PIC 9(9). …1.
       PROCEDURE DIVISION.
           INVOKE 'Excel.Application' 'CREATEOBJ'
               RETURNING AP-OBJ.
           :
           SET CDATA-NUM TO
               'Workbooks(1).Worksheets(1).Cells(1,1).Value'
                  WITH AP-OBJ. …2.

例の説明
  1. 外部10進項目で項目を定義します。
  2. VARIANT値を受け取ります。

(2) 変換しない場合

VARIANT値をCOBOLデータに変換する必要がない場合は,値をバリアントデータ項目で受け取ることで,受け渡したVARIANT値のポインタを保持できます。

バリアント項目で取得した値を,別のセルにそのまま設定する例を次に示します。

変換しない例
       WORKING-STORAGE SECTION.
       01 AP-OBJ USAGE OBJECT REFERENCE OLE.
       01 CDATA-VAR USAGE VARIANT VALUE ZERO. …1.
       PROCEDURE DIVISION.
           INVOKE 'Excel.Application' 'CREATEOBJ'
               RETURNING AP-OBJ.
           :
           SET CDATA-VAR TO
               'Workbooks(1).Worksheets(1).Cells(1,1).Value'
                  WITH AP-OBJ. …2.
           SET 'Workbooks(1).Worksheets(1).Cells(1,2).Value'
                  WITH AP-OBJ TO CDATA-VAR. …3.

例の説明
  1. バリアントデータで項目を定義します。
  2. 値を取得します。
  3. 取得した値をそのまま別のセルに設定します。

(3) VARIANT値の解放

不要となったVARIANT値は,バリアントデータ項目を初期化することで,解放できます。

不要となったVARIANT値を解放する例を次に示します。

VARIANT値の解放例
       WORKING-STORAGE SECTION.
       01 AP-OBJ USAGE OBJECT REFERENCE OLE.
       01 CDATA-VAR USAGE VARIANT VALUE ZERO. …1.
       PROCEDURE DIVISION.
           INVOKE 'Excel.Application' 'CREATEOBJ'
               RETURNING AP-OBJ.
           :
           SET CDATA-VAR TO
               'Workbooks(1).Worksheets(1).Cells(1,1).Value'
                  WITH AP-OBJ. …2.
           SET 'Workbooks(1).Worksheets(1).Cells(1,2).Value'
                  WITH AP-OBJ TO CDATA-VAR. …3.
           SET CDATA-VAR TO NULL. …4.

例の説明
  1. バリアントデータで項目を定義します。
  2. 値を設定します。
  3. 取得した値をそのまま別のセルに設定します。
  4. バリアントデータ項目を解放します。

(4) 明示的な変換

取得したVARIANT値がどの型かがわからない場合は,いったんVARIANT値の型をチェックしたあとで,その型に合ったCOBOLのデータ項目に設定します。VARIANT値の型は,TYPE-OF-VARIANT関数で取得できます。TYPE-OF-VARIANT関数については,マニュアル「COBOL2002 言語 拡張仕様編 18.5.3 TYPE-OF-VARIANT関数(OLE2オートメーションインタフェース機能)」を参照ください。

VARIANT値の型をチェックしたあとで,該当するCOBOLのデータ項目に値を設定する例を次に示します。

明示的な変換の例
       WORKING-STORAGE SECTION.
       01 AP-OBJ USAGE OBJECT REFERENCE OLE.
       01 CDATA-VAR USAGE VARIANT VALUE ZERO. …1.
       01 CDATA-COMP PIC S9(10) USAGE COMP.
       01 CDATA-COMP2 USAGE COMP-2.
       01 CDATA-ALP.
         02 FILLER OCCURS 255 DEPENDING ON C-LNG PIC X.
       01 C-LNG PIC 9(4) USAGE COMP VALUE ZERO.
       PROCEDURE DIVISION.
           INVOKE 'Excel.Application' 'CREATEOBJ'
               RETURNING AP-OBJ.
           :
           SET CDATA-VAR TO 
               'Workbooks(1).Worksheets(1).Cells(1,1).Value'
                  WITH AP-OBJ. …2.
           EVALUATE FUNCTION TYPE-OF-VARIANT(CDATA-VAR) …3.
             WHEN 2
             WHEN 3 …4.
               COMPUTE CDATA-COMP =
                       FUNCTION VARIANT-TO-INTEGER(CDATA-VAR)
             WHEN 4
             WHEN 5 …4.
               COMPUTE CDATA-COMP2 =
                       FUNCTION VARIANT-TO-NUMERIC(CDATA-VAR)
             WHEN 6
             WHEN 7
             WHEN 8
             WHEN 9
               COMPUTE C-LNG =
                 FUNCTION LENGTH-OF-VARIANT(CDATA-VAR) …5.
               MOVE 
                 FUNCTION VARIANT-TO-ALPHANUMERIC(CDATA-VAR)
                 TO CDATA-ALP …4.
           END-EVALUATE.

例の説明
  1. バリアントデータで項目を定義します。
  2. VARIANT値を取得します。
  3. 取得したVARIANT値の型をチェックします。
  4. 該当するCOBOLデータに振り分けて設定します。
  5. 文字型へデータが設定された場合は,長さをチェックします。

(5) バリアントデータ項目の設定

SET文を使って,CONVERT-TO-VARIANT関数で作成したVARIANT

値のポインタを,バリアントデータ項目に保持したり,別のバリアントデータ項目に転記できます。

バリアントデータ項目に値を設定する例を次に示します。

バリアントデータ項目の設定例
       WORKING-STORAGE SECTION.
       01 CBL-DATA-DATE PIC X(8) VALUE '03/01/01'.
       01 CDATA-VAR1 USAGE VARIANT VALUE ZERO. …1.
       01 CDATA-VAR2 USAGE VARIANT VALUE ZERO. …1.'
       PROCEDURE DIVISION.
           INVOKE 'Excel.Application' 'CREATEOBJ'
                  RETURNING AP-OBJ.
                :
           SET CDATA-VAR1 
                  TO FUNCTION 
                  CONVERT-TO-VARIANT(7,CBL-DATA-DATE). …2.
           SET CDATA-VAR2 TO CDATA-VAR1. …3.

例の説明
  1. バリアントデータで項目を定義します。(1.’も同様です)。
  2. CONVERT-TO-VARIANT関数で取得したVARIANT値のポインタを,1.(CDATA-VAR1)のバリアントデータ項目に設定します。
    CONVERT-TO-VARIANT関数で取得した値を転記する場合,関数で一時的に作成したVARIANT値の設定領域は,転記が終了したあとに解放されます。
  3. VARIANT値をコピーした領域(CDATA-VAR1)へのポインタを,1.’(CDATA-VAR2)のバリアントデータ項目に転記します。
    なお,このとき受け取り側作用対象のバリアントデータ項目にVARIANT値がすでにある場合,該当するVARIANT領域は解放されます。
    また,このとき送り出し側作用対象のバリアントデータ項目のポインタがNULLの場合,受け取り側作用対象のバリアントデータ項目にもNULLが転記されます。

(6) バリアントデータ項目にEXTERNAL句を指定する場合

バリアントデータ項目にEXTERNAL句を指定する場合については,「4.2.2 外部属性(EXTERNAL句)」の「(2) EXTERNAL領域にVARIANTデータ項目を含む場合の注意事項」を参照してください。