英数字または国別関数の結果は、関数引数によって、長さや値が異なることがあります。
次の例では、R3 に移動されるデータの量および COMPUTE ステートメントの結果は、R1 および R2 の値とサイズによって異なります。
01 R1 Pic x(10) value “e”.
01 R2 Pic x(05) value “f”.
01 R3 Pic x(20) value spaces.
01 L Pic 99.
. . .
Move Function Max(R1 R2) to R3
Compute L = Function Length(Function Max(R1 R2))
このコードの結果は次のようになります。
R1 が「e」ではなく「g」を含んでいたなら、コードの結果は以下のようになります。
プログラムが関数引数として国別データを使用する場合、同様に関数結果の長さおよび値が変化します。 例えば、以下のコードは上のフラグメントと等しいですが、英数字データではなく国別データを使用します。
01 R1 Pic n(10) national value “e”.
01 R2 Pic n(05) national value “f”.
01 R3 Pic n(20) national value spaces.
01 L Pic 99 national.
. . .
Move Function Max(R1 R2) to R3
Compute L = Function Length(Function Max(R1 R2))
このコードの結果は以下のようになります。これらは、国別文字についてのものであることを除けば、最初の結果のセットと似ています。
英数字または国別の関数からの可変長出力を取り扱うことがあります。それに応じてプログラムを設計しなければなりません。例えば、書き込むレコードによって長さが異なる可能性があるときには、可変長レコード・ファイルの使用を考えることが必要になります。
File Section.
FD Output-File Recording Mode V.
01 Short-Customer-Record Pic X(50).
01 Long-Customer-Record Pic X(70).
Working-Storage Section.
01 R1 Pic x(50).
01 R2 Pic x(70).
. . .
If R1 > R2
Write Short-Customer-Record from R1
Else
Write Long-Customer-Record from R2
End-if
関連タスク
最大または最小データ項目の検出
算術の実行
関連参照
MAX
(「COBOL for Windows 言語解説書」)