%SIZE (サイズ (バイト数) の検索)

%SIZE(variable)
%SIZE(literal)
%SIZE(array{:*ALL})
%SIZE(table{:*ALL})
%SIZE(multiple occurrence data structure{:*ALL})

%SIZE は定数またはフィールドが占めているバイト数を戻します。 この引数は、リテラル、名前付き定数、データ構造、データ構造サブフィー ルド、フィールド、配列、またはテーブル名とすることができます。 式を含めることはできませんが、一部の定数値組み込み関数および定数式は受け入れられます。 戻り値は符号なし整数形式 (タイプ U) です。

図形リテラルの場合は、サイズは、先行および後書きのシフト文字を含まない図形 文字によって占められるバイト数です。 16 進数リテラル または UCS-2 リテラルの場合、戻されるサイズは、そのリテラル内 の 16 進数の桁数の半分です。

可変長フィールドの場合、%SIZE は フィールドによって占有されている 合計バイト数 (宣言された最大長より 2 バイト長い) を戻します。

ヌル値可能フィールドで戻される長さ (%SIZE) は、そのヌル標識の設定値とは 無関係に、常に全体の長さです。

引数が配列名、テーブル名、または複数オカレンス・データ構造名であった場合には、戻り値は 1 つの要素またはオカレンスのサイズです。%SIZE の 2 番目のパラメーターとして *ALL が指定された場合には、戻り値 はすべての要素またはオカレンスが占める記憶域となります。 ポインター・サブフィールドを含む複数オカレンス・データ構造の場合には、そのサイズ が 1 つのオカレンスにオカレンス数を乗じたサイズより大きくなることがあります。 システムではポインターを 16 で割り切れるアドレスで記憶域に入れる必要があ るからです。 結果として、すべてのオカレンスについてポインター・サブフィールドを記憶域内で正 しく位置決めできるように、各オカレンスの長さが正確に 16 バイトの倍数となるよう に増やさなければならないことがあります。

%SIZE は、定義仕様書で使用できる数値定数および演算仕様書の拡張演算項目 2 フィールドの式のどこにでも指定することができます。

詳細については、サイズ変更命令または 組み込み関数を参照してください。

図 221. %SIZE の例
 *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++
D arr1            S             10    DIM(4)
D table1          S              5    DIM(20)
D field1          S             10
D field2          S              9B 0
D field3          S              5P 2
D num             S              5P 0
D mds             DS            20    occurs(10)
D mds_size        C                   const (%size (mds: *all))
D mds_ptr         DS            20    OCCURS(10)
D   pointer                       *
D vCity           S             40A   VARYING INZ('North York')
D fCity           S             40A           INZ('North York')

 /FREE
     num = %SIZE(field1);        //  10
     num = %SIZE('HH');          //   2
     num = %SIZE(123.4);         //   4
     num = %SIZE(-03.00);        //   4
     num = %SIZE(arr1);          //  10
     num = %SIZE(arr1:*ALL);     //  40
     num = %SIZE(table1);        //   5
     num = %SIZE(table1:*ALL);   // 100
     num = %SIZE(mds);           //  20
     num = %SIZE(mds:*ALL);      // 200
     num = %SIZE(mds_ptr);       //  20
     num = %SIZE(mds_ptr:*ALL);  // 320
     num = %SIZE(field2);        //   4
     num = %SIZE(field3);        //   3
     n1 = %SIZE(vCity);          //  42
     n2 = %SIZE(fCity);          //  40
 /END-FREE