+----------------------------------IBM 拡張----------------------------------+
LENGTH OF 句は、ID で参照されるデータ項目の現行の長さと等しいバイト数の内容を持つ、特殊レジスターを暗黙に作成します。
LENGTH OF 特殊レジスターには、次のような暗黙の定義があります。
USAGE IS BINARY, PICTURE 9(9)
LENGTH OF 特殊レジスターの暗黙定義と同じ定義を持つ数字データ項目を使用できる手続き部では、どこでもこの特殊レジスターを使うことができます。
これは、参照修飾子の開始位置または長さの式に現れることがあります。 ただし、LENGTH OF 特殊レジスターは、修正された参照であるどのオペランドにも適用できるわけではありません。
LENGTH OF オペランドが関数であってはなりませんが、LENGTH OF 特殊レジスターは、整数のパラメーターが認められている関数では使用できます。
LENGTH OF 特殊レジスターが LENGTH 関数の引数として使用されている場合、その結果は常に 4 になり、LENGTH OF に対して指定された引数に依存しません。
下記のいずれにもすることはできません。
LENGTH OF を CALL ステートメントの BY CONTENT 句の中で使用できます。
日時データ項目は、LENGTH OF 特殊レジスターを使用する式の中で使用することができます。 ID は、タイプ名であってもよいし、タイプ名に従属する項目であってもかまいません。
テーブル・エレメントの場合、LENGTH OF 特殊レジスターには 1 回のオカレンスの長さ (バイト単位) が入ります。 この場合のテーブル・エレメントを参照する際に、添え字を使用する必要はありません。
可変長エレメントの場合、LENGTH OF 特殊レジスターには、オカレンス依存 (ODO) 変数の現行内容に基づく長さが入ります。
このレジスターは、ID によって参照される区域が現在はプログラムに利用できない場合でも、 判別できる長さを持つどの ID に対してもその値を戻します。 たとえば、ファイル定義において 01 レベル・レコードの一部である ID は該当するファイルがオープンするまで利用できませんが、LENGTH OF などの ID はファイルがオープンする前でも識別可能です。
可変長項目に関して、ODO 変数の内容が利用できない場合、LENGTH OF 特殊レジスターは未定義です。 たとえば、ODO 変数がオープンしていないファイルの 01 レベル・レコードの中で定義された場合、LENGTH OF 値は存在しないため、エラーが発生します。
LENGTH OF 句を使って参照されるそれぞれの識別名に対して、別個の LENGTH OF 特殊レジスターが存在します。
たとえば、次のとおりです。
MOVE LENGTH OF A TO B DISPLAY LENGTH OF A, A ADD LENGTH OF A TO B CALL "PROGX" USING BY REFERENCE A BY CONTENT LENGTH OF A
+------------------------------End of IBM 拡張-------------------------------+