uCosminexus Interschema ユーザーズガイド
FDLエディタ及びMDLエディタの式中に使用できる関数について説明します。FDLエディタ及びMDLエディタで記述する式中には,Interschemaが標準で提供している関数以外に,ユーザが定義した関数を組み込んで使用できます。ここでは,標準で提供している関数について説明します。ユーザが定義した関数を組み込む方法については,「11. ユーザ組み込み関数」を参照してください。
FDLエディタ及びMDLエディタで記述する式中で使用できる関数の一覧を次に示します。
表6-14 関数一覧
関数種別 | 関数の書式 | 戻り値型 | 説明 |
---|---|---|---|
数字操作 | ROUND (i_num1, 整数定数i) | i_num | i_num1を指定桁で四捨五入した値を返します。
|
FLOOR (i_num1, 整数定数i) | i_num | i_num1を指定桁で切り捨てた値を返します。
|
|
CEIL (i_num1, 整数定数i) | i_num | i_num1を指定桁で切り上げた値を返します。
|
|
SUM (i_num1, ...)※1 | i_num | i_num1...の和を返す。 | |
文字列 操作 |
LEFT (i_string1, i_num1) | i_string ※2 |
i_string1の左端(先頭)からINT(i_num1)文字目までの文字列を取り出します。i_string1の文字数がINT(i_num1)文字より小さい場合,i_string1全体を返します。 |
RIGHT (i_string1, i_num1) | i_string1の右端(末尾)からINT(i_num1)文字目までの文字列を取り出します。i_string1の文字数がINT(i_num1)文字より小さい場合,i_string1全体を返します。 | ||
MID (i_string1, i_num1, i_num2) | i_string1の左端(先頭)のINT(i_num1)文字目からINT(i_num2)文字目までの文字列を取り出します。INT(i_num1)が0の場合,文字列の先頭からINT(i_num2)文字目までの文字列を取り出します。INT(i_num2)が0の場合,INT(i_num1)文字目以降のすべての文字列を取り出します。 | ||
STRLEN (i_string1) | i_num | i_string1の文字数を返します。 | |
ADDSTRING (i_string1, ...)※1 | i_string | i_string1...を指定された順序で連結します。※3 | |
バイト列 操作 |
ADDSTREAM (i_stream1, ...)※1 | i_stream | i_stream1...を指定された順序で連結します。 |
CUTSTREAM (i_stream1, i_num1. i_num2) | i_stream ※2 |
i_stream1の先頭INT(i_num1)バイト目からINT(i_num2)バイト目までのバイト列を取り出します。INT(i_num1)が0の場合,バイト列先頭からINT(i_num2)バイトのバイト列を取り出します。INT(i_num2)が0の場合,INT(i_num1)バイト目以降のすべてのバイト列を取り出します。 | |
日時操作 | CURRENTDATE ( ) | i_dtm | 現在の日付を返します。 |
CURRENTTIME ( ) | 現在の時刻を返します。 | ||
CURRENTDTM ( ) | 現在の日付時刻を返します。 | ||
SETDATETIME (CC,YY,MM,DD,hh,mm,ss,zz) CC〜ss:i_num zz:i_string or i_null |
日付時刻型の値を設定します。パラメタの意味は,次のとおりです。
|
||
GETDATETIME (整数定数i, i_dtm) | i_num | 整数定数iの値に応じて次のパート値を返します。 i = 0 CCYY (西暦年) i = 1 CC (西暦年上位2桁) i = 2 YY (年) i = 3 MM (月) i = 4 DD (日) i = 5 hh (時) i = 6 mm (分) i = 7 ss (秒) |
|
GETDTMZONE (i_dtm) | i_string | 日付時刻型のゾーン部文字列を返す。ゾーン部がない場合はi_nullを返します。 | |
型変換 | TOSTRING (i_num1, i_string1) | i_string | i_num1を書式文字列i_string1に従ってi_string型に変換します。変換結果の文字列の文字コードはJIS8になります。 書式文字列の形式は次のとおりです。形式に従って1バイト文字で指定します。[ ]内は省略できます。符号は,先頭又は末尾のどちらかにだけ指定できます。
|
HEXSTRTONUM (i_string1) | i_num | 16進表記文字列i_string1をi_num型に変換します。文字列先頭の「0x」の有無,及び英大文字/英小文字の使用は任意です。また,文字列は奇数バイトでも使用できます。 | |
HEXSTRTOSTREAM (i_string1) | i_stream | 16進表記文字列i_string1をi_stream型に変換します。文字列先頭の「0x」の有無,及び英大文字/英小文字の使用は任意です。また,文字列は奇数バイトでも使用できます。 | |
STREAMTOHEXSTR (i_stream1) | i_string | i_stream1を16進表記文字列に変換します。文字列先頭の「0x」は付加されません。英小文字で文字列化されます。変換結果文字列の文字コードはJIS7です。出力文字列は偶数バイトになります。 | |
条件 | IF (条件式, any1, any2) | any1 又は any2 |
条件式の評価結果がTRUEならany1,FALSEならany2を評価して返します。戻り値型は評価結果に依存します。 |
IFEXIST (グローバル名, any) | any | グローバル名が指すコンポーネントがあれば該当するコンポーネント,なければanyを返します。 対象が型要素の場合は,値がある場合にあると見なします。対象が構造の場合は,子コンポーネント以下の要素のどれかに値があればあると見なします。セパレータしか現れない場合は,ないと見なします。 コンポーネントがあるかないかの判定は,「その他」のEXIST関数と同じです。 |
|
XML操作 | GETTAGNAME (グローバル名) | i_string | グローバル名がXML要素を表す場合,対応するXMLタグ名を返します。グローバル名がXML属性を表す場合,該当する属性名を返します。その他の場合はi_nullを返します。 |
GETANYTEXT (ANY型グローバル名, 整数定数i) | i_string | ANY型のコンポーネントのデータから,タグ間テキストだけを抽出して連結したデータを返します。指定したコンポーネントがANY型でないなどの不正時はi_nullを返します。最上位要素(ANY型自身)のテキストデータのwhite spaceの扱いは,実行時オプション「-XWS」に従った結果に対して処理します。 テキスト連結方法は,整数定数iの指定に従います。
|
|
EXISTXML (グローバル名) | i_bool | 評価済みのコンポーネントがあればTRUE,なければFALSEを返します。 対象が型要素の場合は,値がある場合にあると見なします。対象が構造の場合は,子コンポーネント以下の要素のどれかに値があればあると見なします。セパレータしか現れない場合は,ないと見なします。対象がXML要素又はXML属性の場合は,タグ又は属性名が出現すれば,データがなくてもあると見なします(空要素をあると見なします)。 EXISTXML関数は,XML要素又はXML属性に対しての判定以外は,「その他」のEXIST関数と同じです。 |
|
EXISTCOUNTXML (グローバル名, ...)※1 | i_num | 引数すべてにEXISTXML関数を適用して,TRUEになった数を返します。 対象がXML要素又はXML属性の場合は,タグ又は属性名が出現すれば,データがなくてもあると見なします(空要素をあると見なします)。 EXISTCOUNTXML関数は,XML要素又はXML属性に対しての判定以外は,「その他」のEXISTCOUNT関数と同じです。 |
|
ARRAYREALSIZEXML (グローバル名) | i_num | 評価済みのコンポーネントの配列要素数を返します(空の要素はカウントしません,XMLの空要素はカウントします)。 対象がXML要素又はXML属性の場合は,タグ又は属性名が出現すれば,データがなくてもあると見なします(空要素をあると見なします)。 ARRAYREALSIZEXML関数は,XML要素又はXML属性に対しての判定以外は,「その他」のARRAYREALSIZE関数と同じです。 |
|
GETCOMPXML (整数定数i, グローバル名, ...)※1 整数定数は1以上 |
any | グローバル名で指定されたコンポーネントの中から,整数定数i番目に出現したコンポーネントを返します。 対象がXML要素又はXML属性の場合は,タグ又は属性名が出現すれば,データがなくてもあると見なします(空要素をあると見なします)。 GETCOMPXML関数は,XML要素又はXML属性に対しての判定以外は,「その他」のGETCOMP関数と同じです。 |
|
GETCOMPIFXML (基点パス名, 条件式,整数定数i, 連結パス名, ...)※1 整数定数は1以上 |
any | 連結パス名で指定されたコンポーネントで指定条件式を満たすもののうち,整数定数i番目に出現したコンポーネントを返します。 対象がXML要素又はXML属性の場合は,タグ又は属性名が出現すれば,データがなくてもあると見なします(空要素をあると見なします)。 GETCOMPIFXML関数は,XML要素又はXML属性に対しての判定以外は,「その他」のGETCOMPIF関数と同じです。 |
|
IFEXISTXML (グローバル名, any) | any | グローバル名が指すコンポーネントがあれば該当するコンポーネント,なければanyを返します。 対象が型要素の場合は,値がある場合にあると見なします。対象が構造の場合は,子コンポーネント以下の要素のどれかに値があればあると見なします。セパレータしか現れない場合は,ないと見なします。対象がXML要素又はXML属性の場合は,タグ又は属性名が出現すれば,データがなくてもあると見なします(空要素をあると見なします)。 コンポーネントがあるかないかの判定は,「XML操作」のEXISTXML関数と同じです。 |
|
特殊 | ORDEROFFSET (i_num1, i_num2) | − | 現在の位置からi_num1相対オフセット位置にあるi_num2長のバイト列を,順序決定式の値とします。 順序決定式を定義する場合だけ使用できます。 |
EXISTWHILE (i_num1, i_num2, i_bool1, i_stream1) | − | 現在の位置からi_num1相対オフセット位置にあるi_num2長のバイト列を,関数引数として指定されたi_stream1バイト列と比較します。 条件i_bool1が%TRUEの場合,比較した結果が一致する間,コンポーネントが出現すると見なします。 条件i_bool1が%FALSEの場合は,比較した結果が不一致の間,コンポーネントが出現すると見なします。 第4パラメタi_stream1は,コンポーネントの出現を判定するごとに毎回評価されます。 出現回数決定式を定義する場合だけ使用できます。 |
|
WHILE (条件式) | − | 条件式が満たされる間,コンポーネントが出現すると見なします。条件式は,コンポーネントの出現を判定するごとに毎回評価されます。 出現回数決定式を定義する場合だけ使用できます。 |
|
その他 | LENGTH (グローバル名) | i_num | グローバル名が指すコンポーネントのバイト長を返します。ただし,対象がXML要素(含む属性)の場合は,常に0を返します。 グローバル名で指定されたコンポーネントの子孫がグループ単位出力指定で処理済みの場合,そのコンポーネント分のサイズは0として計算します。 |
INDEX (整数定数) 整数定数は0以上 |
i_num | 対象コンポーネント(現在評価中の式が定義されているコンポーネント)の整数定数で指定された分だけ上の階層にあるコンポーネントの,現在のインデクスを返します。 構造に対する評価規則中のINDEX関数は,その構造がコンポーネントとして使われている場所を0として適用します。 |
|
ARRAYSIZE (グローバル名) | i_num | 評価済みのコンポーネントの配列要素数を返します(空の要素もカウントします)。 | |
ARRAYREALSIZE (グローバル名) | i_num | 評価済みのコンポーネントの配列要素数を返します(空の要素はカウントしません)。 | |
EXIST (グローバル名) | i_bool | 評価済みのコンポーネントがあればTRUE,なければFALSEを返します。 対象が型要素の場合は,値がある場合にあると見なします。対象が構造の場合は,子コンポーネント以下の要素のどれかに値があればあると見なします。セパレータしか現れない場合は,ないと見なします。 対象がXML要素で,データを持たない場合(EMPTY要素などタグだけ出現するもの)は,FALSEを返します。 |
|
EXISTCOUNT (グローバル名,...) ※1 | i_num | 引数すべてにEXIST関数を適用して,TRUEになった数を返します。 | |
VALUEMAP(入力側要素グローバル名, 出力側要素グローバル名, {入力側項目番号, 出力側項目番号}, ...) | 出力要素の型 | 値定義を持つ要素間で,値を対応付けます。対応付ける値の項目番号(値定義での出現順)を組にして複数指定します。項目番号「0」は,値定義に現れない値を意味します。 | |
GETCOUNT( ) | i_num | システムが持っているカウンタの値を返します。FDL又はMDLの中でカウンタが指定されていない場合は,何も返しません。 | |
GETCOMP(整数定数i, グローバル名, ...)※1 整数定数は1以上 |
any | グローバル名で指定されたコンポーネントの中から,整数定数i番目に出現したコンポーネントを返します。GETCOMP関数は,ほかの関数(GETCOMPIF関数,GETCOMPIFXML関数を除く)の引数のグローバル名として使用できます。 | |
GETCOMPIF(基点パス名, 条件式,整数定数i, 連結パス名, ...)※1 整数定数は1以上 |
any | 連結パス名で指定されたコンポーネントで指定条件式を満たすもののうち,整数定数i番目に出現したコンポーネントを返します。GETCOMPIF関数はGETCOMPIF関数,GETCOMPIFXML関数 を除いたほかの関数の引数のグローバル名として使用できます。また,GETCOMPIF関数の引数にGETCOMP関数,GETCOMPXML関数,GETCOMPIF関数,及びGETCOMPIFXML関数は使用できません。 |
VALUEMAP関数,GETCOMP関数,及びGETCOMPIF関数については,例を挙げて次に説明します。
VALUEMAP関数を使用した,要素の値同士のマッピング例を次に示します。
マップ式を次のように記述します。
= VALUEMAP(IN@A, #, 1, 2, 2, 3, 3, 1, 0, 0);
この場合のマッピング関係を次に示します。「その他」は,値定義されていない値を意味し,入力された値をそのまま出力する指定になります。
図6-26 VALUEMAP関数を使用した値のマッピング例
GETCOMP関数は,入力側にある選択構造の子コンポーネントで,何番目に出現するか分からないコンポーネントを取り出す場合などに使用します。
GETCOMPの例を次に説明します。
図6-27 GETCOMP関数を使用した例
入力側フォーマット「IN」は,選択構造「TFD」の要素「x1」から「xn」が順不同で現れ,出力側フォーマット「OUT」は,要素「y1」から「yn」を順番に出力すると仮定します。また,入力側の要素「xi」を出力側の要素「yi」へマッピングすると仮定します。
この場合,要素「yi」に対するマップ式は次のようになります。
= GETCOMP( 1, IN@...@MSG@TFD[*]@xi) ;
入力側の構造「TFD」の子コンポーネントのうち,1番目に現れた「xi」を「yi」へ代入する」意味になります。
GETCOMPIF関数は,GETCOMP関数によって取り出されるコンポーネントに対する条件を追加したものです。例えば,入力側で繰り返し出現する構造コンポーネントがコードを表す子コンポーネントと値を表すコンポーネントを持つ場合に,その構造コンポーネントが特定のコードを持つときの値(要素)を取り出すために使用します。
基点パス名には検索対象のコンポーネントを指定します。連結パス名は実際に取り出す対象のコンポーネントを指定します。条件式内のパス名及び連結パス名では,基点パスで指定したコンポーネントの子に対して,基点パス部分を「&」とし,パス名を「&@xxx」と記述できます。基点パスコンポーネントそのものを表す場合は「&&」と指定します。基点パス名及び連結パス名ではインデクスに「*」を使用できますが,条件式内では使用できません。
GETCOMPIF関数の使用例を次に示します。
図6-28 GETCOMPIF関数を使用した例
例のように,入力側フォーマット「IN」の構造「SEG」から,codeが「1」であるときのvalueをOUTフォーマットのdata1へ,codeが「2」のときのvalueをOUTフォーマットのdata2へ出力する場合,data1及びdata2のマップ式は次のようになります。
data1 = GETCOMPIF(IN@...@MSG@SEG[*], &@code == 1, 1, &@value); data2 = GETCOMPIF(IN@...@MSG@SEG[*], &@code == 2, 1, &@value);
All Rights Reserved, Copyright (C) 2000, Information-technology Promotion Agency, Japan.
All Rights Reserved. Copyright (C) 2005, 2008, Hitachi, Ltd.
All Rights Reserved, Copyright (C) 1985-1998, Microsoft Corporation.