DYNAMIC LENGTH句は,実行時にそのデータ項目の長さが変化することを定義する。
- 一般形式
DYNAMIC LENGTH 動的長構造名1 [ LIMIT IS 整数1 ]
- 構文規則
- PICTURE句はこの項目の字類を示す。PICTURE句に指定される文字列は,1文字のXまたはNでなければならない。
ただし,-JPN,V3JPNオプション指定時,PICTURE文字列は1文字のXでなければならない。
- 動的長構造名1を指定した場合,特殊名段落のDYNAMIC LENGTH STRUCTURE句に指定した動的長構造名1と対応する。
- 作業場所節で定義されたDYNAMIC LENGTH句のLIMIT指定を省略した場合は,VALUE句がなくてはならない。
- 整数1は,英数字項目の場合は,1〜16,777,214の値でなければならない。また,日本語項目の場合は,1〜16,382の値でなければならない。
- 01レベルおよび77レベルの項目以外に指定してはならない。
- DYNAMIC LENGTH句はレベル番号,データ名,PICTURE句,USAGE句,VALUE句以外と同時に指定できない。
- 作業場所節で定義したDYNAMIC LENGTH句で,LIMIT指定とVALUE句を同時に指定した場合,VALUE句に指定した定数の長さはLIMIT指定の値を超えてはならない。
- 動的長基本項目を被再定義項目としてはならない。
- 動的長基本項目を部分参照してはならない。
- 動的長基本項目に対して,条件名記述項を関連付けてはならない。
- 集団項目に対して,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関数の引数
- ・連絡節で定義された仮引数
All Rights Reserved. Copyright (C) 2003, 2013, Hitachi, Ltd.