組み込み関数
組み込み関数は、指定されたデータに対して命令を実行 する点で命令コードに類似しています。組み込み関数は、式の中で使用することができます。また、定数値組み込み関数は名前付き定数においても使用できます。 これらの名前付き定数はどの仕様書でも使用できます。
すべての組み込み関数は、最初の文字としてパーセント記号 (%) で始まります。
組み込み関数の構文は次のとおりです。
関数名{(引数 {:引数... }) }
関数の引数は、変数、定数、式、プロトタイプ・プロシージャー、または他の組み込み関数とすることが
できます。 式の引数には組み込み関数を含めることができます。 以下の例は
これを例示しています。図 1. 組み込み関数の引数の例
CL0N01Factor1+++++++Opcode(E)+Extended-factor2++++++++++++++++++++++++++
*
* This example shows a complex expression with multiple
* nested built-in functions.
*
* %TRIM takes as its argument a string. In this example, the
* argument is the concatenation of string A and the string
* returned by the %SUBST built-in function. %SUBST will return
* a substring of string B starting at position 11 and continuing
* for the length returned by %SIZE minus 20. %SIZE will return
* the length of string B.
*
* If A is the string ' Toronto,' and B is the string
* ' Ontario, Canada ' then the argument for %TRIM will
* be ' Toronto, Canada ' and RES will have the value
* 'Toronto, Canada'.
*
C EVAL RES = %TRIM(A + %SUBST(B:11:%SIZE(B) - 20))
使用できる引数の詳細については、個々の組み込み関数の説明を参照してください。
命令コードと異なり、組み込み関数は、結果のフィールドに値を入れるのではなく 、値を戻してきます。 以下の例はこの相違を例示しています。
図 2. 組み込み関数の例
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
* In the following example, CITY contains the string
* 'Toronto, Ontario'. The SCAN operation is used to locate the
* separating blank, position 9 in this illustration. SUBST
* places the string 'Ontario' in field TCNTRE.
*
* Next, TCNTRE is compared to the literal 'Ontario' and
* 1 is added to CITYCNT.
*
C ' ' SCAN CITY C
C ADD 1 C
C SUBST CITY:C TCNTRE
C 'Ontario' IFEQ TCNTRE
C ADD 1 CITYCNT
C ENDIF
*
* In this example, CITY contains the same value, but the
* variable TCNTRE is not necessary since the %SUBST built-in
* function returns the appropriate value. In addition, the
* intermediary step of adding 1 to C is simplified since
* %SUBST accepts expressions as arguments.
*
C ' ' SCAN CITY C
C IF %SUBST(CITY:C+1) = 'Ontario'
C EVAL CITYCNT = CITYCNT+1
C ENDIF
この例で使用されている引数 (変数 CITY および式 C+1) は SUBST 命令の演算項 目の値と似ていることに注意してください。関数そのものの戻り値は結果と類似しています。 一般に、組み込み関数の引数は、命令コードの演算項目 1 および演算項目 2 フィール ドと類似しています。
組み込み関数が役立つもう 1 つの機能は、定義仕様書に使用された時にコードの保守 が単純化される点です。 以下の例はこの機能を例示しています。
図 3. 組み込み関数による単純化された保守
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++++++++
*
* In this example, CUSTNAME is a field in the
* externally described data structure CUSTOMER.
* If the length of CUSTNAME is changed, the attributes of
* both TEMPNAME and NAMEARRAY would be changed merely by
* recompiling. The use of the %SIZE built-in function means
* no changes to your code would be necessary.
*
D CUSTOMER E DS
D DS
D TEMPNAME LIKE(CUSTNAME)
D NAMEARRAY 1 OVERLAY(TEMPNAME)
D DIM(%SIZE(TEMPNAME))
組み込み関数は、拡張演算項目 2 演算仕様書で定義仕様書のキーワードと一緒に式 の中で使用することができます。定義仕様書キーワードと一緒に使用する時には、組み込み関数の値がコンパイル 時に分かっていなければならず、引数を式とすることはできません。
次の表には、組み込み関数、その引数、および戻り値がリストされています。
名前 | 引数 | 戻り値 |
---|---|---|
%ABS | 数値式 | 式の絶対値 |
%ADDR | 変数名 {: *DATA } | 変数のアドレス、または可変長変数のデータ部のアドレス |
%ALLOC | 割り振るバイト数 | 割り振られる記憶域へのポインター |
%BITAND | 文字、数値 | すべての引数のビットの論理積 (ビット単位) |
%BITNOT | 文字、数値 | 引数のビットの反転 (ビット単位) |
%BITOR | 文字、数値 | すべての引数のビットの論理和 (ビット単位) |
%BITXOR | 文字、数値 | 2 つの引数のビットの排他論理和 (ビット単位) |
%CHAR |
|
|
%CHECK | コンパレーター・ストリング:チェックされるストリング {:開始位置 } | コンパレーター・ストリング内でない文字の最初の位置。 または、見付からない場合はゼロ |
%CHECKR | コンパレーター・ストリング:チェックされるストリング {:開始位置 } | コンパレーター・ストリング内でない文字の末尾の位置。 または、見付からない場合はゼロ |
%DATE | {値 {: 日付の形式 } } | 指定された値 に対応する日付。 または、指定されていなければ現在のシステム日付。 |
%DAYS | 日数 | 期間としての日数 |
%DEC |
|
パック数値形式の値 |
%DECH | 数値式または文字式: |
パック数値形式の四捨五入値 |
%DECPOS | 数値式 | 10 進数の数 |
%DIFF | 日付または時刻式: 日付または時刻式: 単位 {:秒の小数部の桁数 } | 2 つの日付、時刻、またはタイム・スタンプの差を指定された単位で示したもの |
%DIV | 被除数: 除数 | 2 つの引数の割り算からの商 |
%EDITC | 非浮動数値式:編集コード {:*CURSYM | *ASTFILL | 通貨記号 } | 編集済みの値を表すストリング |
%EDITFLT | 数値式 | 浮動の文字外部表示表現 |
%EDITW | 非浮動数値式:編集語 | 編集済みの値を表すストリング |
%ELEM 1 | 配列、テーブル、または複数オカレンス・データ構造名 | 要素または繰り返しの数 |
%EOF | {ファイル名 } | '1' 最後に実行された反復入力、読み取り操作、またはサブファイルへの書き出し (指定された場合は特定のファイルに対する) が、ファイルの終わり条件またはファイル の先頭条件で終了した場合、およびファイルが指定されているときに、そのファイルに対して最近実行された OPEN、CHAIN、SETGT、または SETLL が 成功しなかった場合。 |
'0' それ以外の場合 | ||
%EQUAL | {ファイル名 } | '1' 最後に実行された SETLL (指定された場合は特定のファイルに対する) また は LOOKUP 命令が等しい項目を見付けた場合 |
'0' それ以外の場合 | ||
%ERROR | '1' 最後に実行された、拡張 'E' が指定された命令コードの結果がエラーである場合 | |
'0' それ以外の場合 | ||
%FIELDS | 更新されるフィールドのリスト | 該当せず |
%FLOAT | 数値式または文字式 | 浮動形式の値 |
%FOUND | {ファイル名 } | '1' 最後に実行された関係のある命令 (指定された場合は特定のファイルに対する) がレコード (CHAIN、DELETE、SETGT、SETLL)、要素 (LOOKUP)、または等しい項目 (CHECK、CHECKR、SCAN) を見付けた場合 |
'0' それ以外の場合 | ||
%GRAPH | 文字、グラフィック、または UCS-2 式 { : ccsid } | 指定された CCSID のグラフィック形式の値 |
%HANDLER | 処理プロシージャー: 通信域 | 該当せず |
%HOURS | 時間数 | 期間としての時間数 |
%INT | 数値式または文字式 | 整数形式の値 |
%INTH | 数値式または文字式 | 整数形式の四捨五入値 |
%KDS | キーを含むデータ構造 |
該当せず |
%LEN | 任意の式 | 数字または文字の長さ |
%LOOKUPxx | 引数: 配列 {:開始指標 {:要素の数 } } | 突き合わせる要素の配列指標 |
%MINUTES | 分数 | 期間としての分数 |
%MONTHS | 月数 | 期間としての月数 |
%MSECONDS | マイクロ秒数 | 期間としてのマイクロ秒数 |
%NULLIND | ヌル値可能フィールド名 | ヌル値可能フィールド用のヌル標識設定値を示す 標識形式の値 |
%OCCUR | 複数オカレンス・データ構造名 | 複数オカレンス・データ構造の現行のオカレンス |
%OPEN | ファイル名 | '1' 指定されたファイルがオープンされている場合 |
'0' 指定されたファイルがクローズされている場合 | ||
%PADDR | プロシージャーまたはプロトタイプ名 | プロシージャーまたはプロトタイプのアドレス |
%PARMS | なし | プロシージャーに渡されたパラメーターの数 |
%PARMNUM | プロシージャー・インターフェース・パラメーター名 | プロシージャー・インターフェース・パラメーターの番号 |
%REALLOC | ポインター: 数値式 | 割り振られる記憶域へのポインター |
%REM | 被除数: 除数 | 2 つの引数の割り算からの剰余 |
%REPLACE | 置換ストリング: ソース・ストリング {:開始 位置 {:置換するソースの長さ } } | 開始位置から開始し、指定された文字数を置換して、 置換ストリングをソース・ストリングに挿入することによって 生成されるストリング |
%SCAN | 検索引数:検索されるストリング{:開始位置{:長さ}} | ストリング内の検索引数の最初の桁またはそれが見付からない場合はゼロ |
%SCANR | 検索引数:検索されるストリング{:開始位置{:長さ}} | ストリング内の検索引数の最後の位置、またはゼロ (その検索引数が見つからない場合) |
%SCANRPL | 走査ストリング: |
ソース・ストリング内で、開始位置から指定された長さの分を走査して、走査ストリングを置換ストリングで置換して生成したストリング |
%SECONDS | 秒数 | 期間としての秒数 |
%SHTDN | '1' システム・オペレーターがシャットダウンを要求している場合 | |
'0' それ以外の場合 | ||
%SIZE 1 | 変数、配列、またはリテラル {:*ALL } | 変数またはリテラルのサイズ |
%SQRT | 数値 | 数値の平方根 |
%STATUS | {ファイル名 } | '0' 最後に実行された、拡張 'E' が指定された命令コード以降、 プログラム・エラーまたはファイル・エラーが発生していない場合 |
エラーが発生した場合、プログラムまたはファイル状況 に関して設定された最新の値 | ||
ファイルが指定されている場合、戻り値は、 そのファイルに関する最新の状況 | ||
%STR | ポインター {:最大長 } | 最初の x'00' までの (ただしその値を含まない) ポインター引数 によってアドレスされる文字 |
%SUBARR | 配列名:開始指標 {:要素の数 } | 配列サブセット |
%SUBDT | 日付または時刻の式: 単位 | 日付または時刻の値の指定された部分を含む、符号なし数値 |
%SUBDT | 日付または時刻式: 単位 {桁数 : { 秒の小数部の桁数 } } | |
%SUBST | ストリング:開始位置 {:長さ } | サブストリング |
%THIS | ネイティブ・メソッド用のクラス・インスタンス | |
%TIME | {値 {: 時刻の形式 } } | 指定された値 に対応する時刻。 または、指定されていなければ現在のシステム時刻。 |
%TIMESTAMP | {(値 {: タイム・スタンプ形式 {: 秒の小数部の桁数 } }) } | 指定された英数字または数字の値 に対応する タイム・スタンプ、または、何も指定されていなければ現在のシステム・タイム・スタンプ。 |
%TIMESTAMP | {(値 {: 秒の小数部の桁数 }) } | 指定された日付またはタイム・スタンプの値 に対応する タイム・スタンプ、または、何も指定されていなければ現在のシステム・タイム・スタンプ。 |
%TLOOKUPxx | 引数: 検索テーブル {: 代替テーブル } | '*ON' 一致するものがある場合 |
'*OFF' それ以外 | ||
%TRIM | ストリング {: トリミング対象文字 } | 左および右のブランクまたは指定文字がトリミングされたストリング |
%TRIML | ストリング {: トリミング対象文字 } | 左のブランクまたは指定文字がトリミングされたストリング |
%TRIMR | ストリング {: トリミング対象文字 } | 右のブランクまたは指定文字がトリミングされたストリング |
%UCS2 | 文字、グラフィック、または UCS-2 式 { : ccsid } | 指定された CCSID の UCS-2 形式の値 |
%UNS | 数値式または文字式 | 符号なし形式の値 |
%UNSH | 数値式または文字式 | 符号なし形式の四捨五入値 |
%XFOOT | 配列式 | 要素の合計 |
%XLATE | 変換元文字: 変換先文字: ストリング {: 開始位置 } | 変換元文字が変換先文字で置換されたストリング |
%XML | XML 文書 { : オプション } | 該当せず |
%YEARS | 年数 | 期間としての年数 |
注:
|