式の注意
値
すべての式は、なんらかの種類の値を使用します。これらの値は、式に追加されてその一部として使用される場合もあれば、「式」プロセッサへの入力である属性から読み込まれる場合もあります。
式における値は文字列、数値、または文字列か数値の配列です。数値はIEEEの倍精度フォーマットで格納され、最大値は約1.8 x 10308です。式で日付値を使用する場合、その値は等価のJavaタイムスタンプ(1970年1月1日00:00から数えたミリ秒)で表されます。
式
式は、演算子で結んだ項目で構成されます。サポートされる項は次のとおりです。
-
数値: 数値は単純な整数で表されるか、浮動小数点と、指数のオプションを使用して複素数を書き込むこともできます。
例:
1000 2.1212 0.1 1.2321e-20 1e10
-
Null: 特殊な名前
null
は、未定義の値を表します。 -
文字列定数: 文字列定数は、一重(')または二重(")の引用符で囲みます。文字列の中の特殊な文字には、次のようにJavaスタイルの円記号(\)を使用できます。
-
\n
または\nn
または\nnn
: 8進コードのNで表した文字 -
\n
: ライン・フィード(新規行)(コード10) -
\r
: キャリッジ・リターン(コード13) -
\a
: ベル(コード7) -
\t
: タブ(コード9) -
\b
: バックスペース(コード8) -
\f
: フォームフィード(コード12) -
\v
: 垂直タブ(コード11)
例:
"the cat slept on the mat" "this is a line feed: \n" 'this is also a string'
-
-
属性名: 式の中で使用する名前には、文字、数字、ドル記号($)、アンダースコア(_)、ピリオド(.)のみを使用し、数字で始めることはできません。その他の文字を使用する必要がある場合には、特殊な構文
@'name
'
または@"name"
を使用すると、式に入力できます。たとえば、名前に空白が含まれている場合は、次のように入力する必要があります。@"a name with spaces"
-
配列値: 配列値は、中カッコ(
{ }
)で囲んだ値のリストとして入力できます。例:
{1, 2, 3} {a+2, b-5}
-
配列選択: 配列の要素は、大カッコで囲んだインデックス式(
[ ]
)を使用して選択できます。最初の要素がインデックス1になります。サブ配列は、配列スライスを使用して選択できます。スライスは、コロンで示されます([lwb:upb]
)。例:
arr[1] arr[x+1] z[2:3+m] {1,2,3}[2]
次の演算子を使用でき、優先度はこの順になります。
演算子 | 優先度 | 意味 |
---|---|---|
^ |
8 |
累乗(例: ^ 0.5は平方根の値を求めます) |
* |
7 |
乗算 |
/ |
7 |
除算 |
% |
7 |
係数 |
+ |
6 |
加算 |
- |
6 |
減算 |
|| |
6 |
文字列連結 |
> |
5 |
次より大きい |
< |
5 |
次より小さい |
>= |
5 |
以上 |
<= |
5 |
以下 |
= または == |
4 |
次と等しい |
!= or <> |
4 |
次と等しくない |
& |
3 |
論理積(AND) |
| |
2 |
論理和(OR) |
! |
1 |
単一の論理否定(NOT) |
比較演算子は、比較が成り立つ場合に1に評価され、成り立たない場合に0に評価されます。
優先度の高い演算子は、優先度の低い演算子より結合度が強くなります。次に例を示します。
a = b + c * d ^ e
これは次に相当します。
a = (b + (c * (d ^ e)))
関数
式の言語では、次の関数を使用できます。
関数 | 引数 | 結果 | 意味 |
---|---|---|---|
floor (x) |
数値 |
数値 |
切下げ |
ceil (x) |
数値 |
数値 |
切上げ |
round (x) |
数値 |
数値 |
一番近い値に丸める |
abs (x) |
数値 |
数値 |
絶対値 |
length (x) |
文字列または配列 |
数値 |
文字列の長さ(文字数)、または配列の長さ(要素数) |
isset (x) |
任意 |
数値 |
引数に等しい場合は1、等しくない場合は0。nullは等しいとして比較されます。 |
equals (a,b) |
スカラー |
数値 |
引数に等しい場合は1、等しくない場合は0。nullは等しいとして比較されます。 |
substr (string, start)または substr (string, start, length) |
文字列、数値、数値 |
文字列 |
部分文字列 - 開始値を負にすると末尾から開始 |
trimleft (string, start)または trimleft (string, start, length) |
文字列、数値、数値 |
文字列 |
左からの部分文字列 |
trimright (string, start)または trimright (string, start, length) |
文字列、数値、数値 |
文字列 |
右からの部分文字列 |
chartonumber (string) |
文字列 |
数値 |
文字列の最初の文字を、対応する数値コードに変換します。文字列が空の場合、結果はnullになります。 |
indexof (string, sub)または indexof (string, sub, start) |
文字列、数値、数値 |
数値 |
startで始め、文字列の中で部分文字列の最初のインデックスを検索します。見つからない場合は0 |
upper (string) |
文字列 |
文字列 |
大文字 |
lower (string) |
文字列 |
文字列 |
小文字 |
stringify (x) |
文字列または数値 |
文字列 |
数値または文字列を文字列に変換して格納します |
digest (x) |
文字列または数値 |
文字列 |
引数からダイジェストを生成します |
format (num)またはformatdate (num, format) |
数値、文字列 |
文字列 |
デフォルトまたは指定した数字フォーマットを使用して数値を書式設定します(java.text.DecimalFormatを参照) |
parsedate (string)またはparsedate (string, format) |
文字列、文字列 |
数値 |
デフォルトまたはサプライヤの日付書式を使用して日付を解析します。解析に失敗した場合、結果はnullです |
soundex (string) |
文字列 |
文字列 |
Soundex |
refinedsoundex (string) |
文字列 |
文字列 |
高精度のsoundex |
metaphone (string) |
文字列 |
文字列 |
基本のmetaphone |
doublemetaphone (string)またはdoublemetaphone (string, length) |
文字列、数値 |
文字列 |
オプションで長さを指定するmetaphone (デフォルトは12) |
regexsplit (string, regex)またはregexsplit (string, regex, limit) |
文字列、文字列、数値 |
文字列配列 |
regexを使用して配列に分割 - java.lang.String.splitを参照してください。 |
regexreplace (string, regex, replace) |
文字列、文字列、文字列 |
文字列 |
文字列で出現するregexをすべて、置換文字列で置換します |
trim (string) |
文字列 |
文字列 |
文字列の先頭および末尾から空白文字を削除します |
mult (number, number, ...) |
数値 |
数値 |
すべての引数の積 |
sum (number, number, ...) |
数値 |
数値 |
すべての引数の和。nullが1つでもあると、結果はnullになります |
zsum (number, number, ...) |
数値 |
数値 |
すべての引数の和。nullはゼロとみなします |
concat (string, string, ...) |
文字列 |
文字列 |
すべての引数を結合します |
concat2 (delimiter, string, string, ...) |
文字列 |
文字列 |
最初の文字を区切り文字として、すべての引数を結合します |
concat3 (delimiter, noblanks, string, string, ...) |
文字列、数値、文字列 |
文字列 |
最初の文字を区切り文字として、すべての引数を結合します。2番目の引数がゼロ以外の場合は、空白文字列を無視します。 |
array (value, value, ...) |
任意 |
配列 |
引数から配列を作成します |
trim2 (string, code) |
文字列、文字列 |
文字列 |
左(code = 'l')、右(code = 'r')、両方(code = 'b')、または任意の位置(code = 'a')から空白を切り捨てます |
nodatacheck (string) |
文字列 |
文字列 |
データ分類なし - 文字列が移入されている場合は'-'を返すか、次のようにデータなしのコード('a' - 'f')を返します。 a = null b = 空文字列 c = 制御文字 d = シングル・スペース e = 複数のスペース f = 他の空白 |
式コンテキスト
式は、EDQの様々なコンテキストで使用されます。コンテキストごとに、異なるセットの名前を使用できます。コンテキストの一部を次にあげておきます。
-
「式」および「式フィルタ」プロセッサ: 式の中の名前がそれぞれ、プロセッサの入力として選択した属性に一致する必要があります。照合では大/小文字が区別され、属性名に接尾辞(属性名でピリオドの後の部分)がある場合には接尾辞が無視されます。
属性名が式の名前として有効でない場合、たとえば空白を含む場合などには、
@"name"
構文を使用して入力する必要があります。たとえば、属性が住所1 (番地)の場合、次のように入力します。@"address line 1 (street)"
-
計算機プロセッサ:
com.datanomic.director.runtime.widgets.common.Calculator
クラスを使用して、多数の標準プロセッサが実装されます。これは、プロセッサのパラメータから(XMLから)の式であり、入力属性を使用して評価されます。式のパラメータは、プロセッサの各出力に対して定義する必要があります。ID
N
の出力のパラメータ名はexpr.N
です。出力が1つしかない場合は、かわりにもっと単純な名前expr
も使用できます。式の中で、入力属性は
iN
として参照できます。NはXMLからの入力IDです。入力に複数の属性が関連付けられている場合、その名前は集計のコンテキストのみで使用できます。出力はID順に評価され、出現が早い出力は
oN
として参照できます。NはXMLからの出力IDです。また作業中の式は、出力の式の複数の場所で使用できる値を格納するように定義することもできます。これらの作業中の式は、出力式より前に評価されます。作業中の式のパラメータ名は
expr.t1
、expr.t2
、などとなります。計算機プロセッサでは、プロセッサのオプションを使用できます。オプションの名前を使用するだけです。
例:
-
「大文字」プロセッサの式は、次のように定義されます。
<parameters> <parameter name="expr">upper(i1)</parameter> </parameters>
-
「連結」プロセッサの式は、次のように定義されます。
<parameters> <parameter name="expr">concat2(separator, i1)</parameter> </parameters>
separator
プロパティの使用方法に注意してください。 -
「文字の切捨て」プロセッサの式は、次のように定義されます。
<parameters> <parameter name="expr.o1">side == 'l' ? trimleft(i1, start, length) : trimright(i1, start, length)</parameter> </parameters>
-
「配列要素の選択」プロセッサの式は、次のように定義されます。
<parameters> <parameter name="expr.t1">fromend ? (length(i1) - index) + 1 : index</parameter> <parameter name="expr.o1">i1[t1]</parameter> </parameters>
-
「正規表現の置換」プロセッサの式は、次のように定義されます。
<parameters> <parameter name="expr.o1">regexreplace(i1, regex, replace)</parameter> <parameter name="expr.o2">o1 != i1 ? 'Y' : 'N'</parameter> </parameters>
この場合、最初の式が置換を実行し、2つ目の式がsuccessフラグを計算します。
高度な機能
-
条件式: 次の構文を使用すると、条件式を指定できます。
a ? b : c
結果は'a'が真であれば'b'になり、それ以外であれば'c'になります。
-
イテレータ式: イテレータ式は、SumやConcatenateなどの集計関数で使用する特殊な機能です。構文は次のとおりです。
{a : expr}
ここで、
a
が配列または複数属性の名前(任意の数の実属性が割り当てられている入力属性),であり、expr
がa
を含む式です。式は、名前で連続した値によって置換されて評価され、結果が集計関数に渡されます。わかりやすいように、例で示します。
例1
sum({ a : a ^ 2 })
これは、aのすべての引数の2乗を合計します。
例2
sum( { a : a < 0 ? 1 : 0 })
aの引数のうち、負のものをすべてカウントします。
例3
sum({ i1 : nodatacheck(i1) = '-'}) > 0 ? 'Y' : 'N'
i1 (入力属性1)の要素について移入された要素をカウントし、いずれかにデータがあればY、「データなし」であればNを返します。