COBOL2002 言語 拡張仕様編


22.5.1 DYNAMIC LENGTH句

DYNAMIC LENGTH句は,実行時にそのデータ項目の長さが変化することを定義する。

一般形式
DYNAMIC LENGTH 動的長構造名1 [ LIMIT IS 整数1 ]

構文規則

  1. PICTURE句はこの項目の字類を示す。PICTURE句に指定される文字列は,1文字のXまたはNでなければならない。

    ただし,-JPN,V3JPNオプション指定時,PICTURE文字列は1文字のXでなければならない。

  2. 動的長構造名1を指定した場合,特殊名段落のDYNAMIC LENGTH STRUCTURE句に指定した動的長構造名1と対応する。

  3. 作業場所節で定義されたDYNAMIC LENGTH句のLIMIT指定を省略した場合は,VALUE句がなくてはならない。

  4. 整数1は,英数字項目の場合は,1〜16,777,214の値でなければならない。また,日本語項目の場合は,1〜16,382の値でなければならない。

  5. 01レベルおよび77レベルの項目以外に指定してはならない。

  6. DYNAMIC LENGTH句はレベル番号,データ名,PICTURE句,USAGE句,VALUE句以外と同時に指定できない。

  7. 作業場所節で定義したDYNAMIC LENGTH句で,LIMIT指定とVALUE句を同時に指定した場合,VALUE句に指定した定数の長さはLIMIT指定の値を超えてはならない。

  8. 動的長基本項目を被再定義項目としてはならない。

  9. 動的長基本項目を部分参照してはならない。

  10. 動的長基本項目に対して,条件名記述項を関連付けてはならない。

  11. 集団項目に対して,DYNAMIC LENGTH句を指定してはならない。

一般規則

  1. DYNAMIC LENGTH句は実行時にその長さが変化するデータ項目を定義する。データ項目の最小の長さは0である。PICTURE句は字類を決定する。

    備考

    PIC XまたはPIC Nの指定によって,この動的長基本項目の字類が,英数字か日本語かが決まる。

  2. 整数1はそのデータ項目に格納できる文字列の最大長を定義する。LIMIT指定がない場合の最大長は次のとおりである。

    このシステムでは次の場合にLIMIT指定を省略できる。

    (a) 作業場所節に定義し,VALUE句が指定されている場合

    (b) 連絡節に定義した場合

    LIMIT指定が省略された場合の,それぞれの最大長は次で定義される。

    (a) VALUE句で指定した文字列の長さ

    (b) 呼び出し元プログラムで設定されたデータの長さ(終端文字の前までの長さ)

    ただし(b)の場合,データの長さが次に示す値を超えている場合は,次の値を最大長とする。

    動的長基本項目の字類

    LIMITの最大長(文字数)

    英数字

    16,777,214

    日本語

    16,382

    (例1)

    WORKING-STORAGE  SECTION.
      01  DYNAMICDATA  PIC X DYNAMIC LENGTH 
                C-STRING   VALUE 'ABCDE'.  *> LIMIT 5 と同等

    (例2)

    LINKAGE  SECTION.
      01  DYNADATA  PIC X DYNAMIC LENGTH C-STRING  .  
    PROCEDURE DIVISION USING DYNADATA .
      *>  呼び出し元プログラムで設定されたデータが格納されているDYNADATAの内容が5バイトのユーザデータ+終端文字の場合,LIMIT 5と同等
      *>  呼び出し元プログラムで設定されたデータが格納されているDYNADATAの内容が16,777,214バイトを超えている場合,LIMIT 16777214 と同等

    作業場所節でLIMIT指定とVALUE句が同時に指定した場合は,LIMIT指定で最大長を決定する。連絡節でLIMIT指定を指定した場合は,呼び出し元プログラムで設定されたデータの長さよりLIMIT指定を優先する。

  3. 動的長基本項目が連絡節に指定され,かつ次のどちらかに該当する場合,その動的長基本項目を受け取り側作用対象に指定してはならない。

    • C言語で記述されたプログラムからCOBOLプログラムが呼ばれる場合

    • 連絡節に指定した動的長基本項目にLIMIT指定がない場合

備考

このシステムでは,次の個所で動的長基本項目が参照されたとき,(最大長+1)文字目までに終端文字が設定されているかチェックする。終端文字が設定されていない場合は実行時エラーとなる。

  • DISPLAY文の一意名1

  • MOVE文の送り出し側作用対象

  • 比較条件の作用対象

  • LENGTH関数の引数

  • 連絡節で定義された仮引数