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関数の引数
 ・連絡節で定義された仮引数