Content Expression Language (CEL)

RICOH ProcessDirectorContent Expression Language (CEL)を使用すると、AFPファイル内の文書に拡張機能(バーコード、テキスト、および非表示領域)のコンテンツと配置を指定する表現を定義できます。インサーター機能がインストールされている場合、CEL を使用すると、インサーター制御ファイルを作成するインサーター規則ファイルの表現を定義し、インサーター結果ファイルを分析および解釈できます。

演算子

下の表は、演算子優先順位が高いものから低いものへの順序を示しています。

オペレーター名 説明
( ) 関数仮パラメーター区切り文字
( ) グループ化
+、- 単項
*、/、% 乗算、除算、モジュロ
+、- 加算、減算
==、!=、>、>=、<、<= 関係
(暗黙) 連結

例:f(3+x)*5は、f(3+x)5を掛けたものです。

言語

パターン テンプレートの例 実際の例 結果
連結 'string1' 'string2' 'a' func 'b' func='VAR' であれば aVARb
関係式 func1 [relational_operator] func2 func1 > func2 func1=5 および func2=1 であれば真
or 条件 or(expr1,expr2,....) or(a>100,a==0,b==1) 式のいずれかが真と評価される場合、真
and 条件 and(expr1,expr2,...) and(a>3,a<10) 式のすべてが真と評価される場合、真
not 条件 not(expr1) not(a==b) 式のすべてが偽と評価される場合、真
決定 if(relational_expression,trueexpr,falseexpr) if(a>v,1,0) 関係式が真である場合、値は trueexpr に設定されます。関係式が false である場合、値は falseexpr に設定されます。
決定 if(value,trueexpr,falseexpr) if(func2,'true','false') func2 が 0 に等しくない数値か、ストリング値が空ストリングに等しくない場合は、ストリングリテラルが真で、そうではない場合は偽

等価ステートメント

ベース 等価 コメント
a a() 変数は () のない関数です。
'*' a '*'a() 連結では、入力の間にスペースが必要ありません。関数 a は、いずれかの方法で表すことができます。

EBNF 言語定義

この Extended Backus-Naur Form (EBNF) では、CEL 表現が expr によって表されます。関係および数値演算は、それらが C 言語で対応する演算として動作します。連続式はつなぎ合わさって 1 つの結果を導きます。

expr = "(", expr, ")" | catenation | numexpr | relexpr | ("+" | "-"), expr | function call | string | number;catenation = expr, expr;numexpr = expr, ("+" | "-" | "*" | "/" | "%"), expr;relexpr = expr, ("==" | "!=" | "<" | ">" | "<=" | ">="), expr;function call = identifier, [ "(", parameters, ")" ];parameters = expr, { ",", expr };identifier = (alpha | "_"), { (alpha | "_" | digit ) };string = "'", (* sequence of characters, with standard \\ escapes *), "'";number = (digit { digit }) | ({ digit } . {digit});

注意: 単なる関数呼び出しです。パラメーター指定のない関数呼び出しは、変数のように見え、また変数のように動作します。

組み込みコンテキスト関数

関数名 構文 説明
substr substr(f,start [,length]) startは、文字列の末尾からの位置です。startは、0から始まります。startは、負の値にできます。
trim trim(string [, charsToTrim]) ストリングの左右から空白 (または charsToTrim に指定されている文字のリスト) を切り取ります。
rtrim rtrim(string [, charsToTrim]) ストリングの右から空白 (または charsToTrim に指定されている文字のリスト) を切り取ります。
ltrim ltrim(string [, charsToTrim]) ストリングの左から空白 (または charsToTrim に指定されている文字のリスト) を切り取ります。
indexof indexof(string, substr [, start ]) ストリング内のサブストリングの開始指標位置を返します。substr が見つからない場合、-1 が返されます。
fmt fmt(formatString [,values]... ) formatString を使用して値を形式設定します。
tr tr(string, fromChars [, toChars]) ストリングで fromChars に一致する文字を、対応する toChars に変換します。fromChars 文字に、対応する文字が toChars (位置の一致) にない場合、fromChar は入力ストリングから削除されます。toChars が省略されると、戻り値では、fromChars にリストされている文字すべてが削除されます。
bin bin(string [, trueChar ]) trueChar をストリングのオンビットとして使用し、入力ストリングを数値に変換します。trueChar が省略されると、"1" がオンビットになります。
fmtbase fmtbase(value, numChars [, baseString ]) baseStringを省略すると、「0123456789ABCDEF」とみなされ、baseStringで表される基数に値を変換した後、右端のnumCharsを返します。baseStringは、どのような文字のリストでも構いませんが、左端の文字がゼロを表し、右端の文字が変換先の基数システムの最大値を表していると想定されます。
exists exists(value) 値が真と評価される場合、真と評価されます。(この関数は defined 関数と同等です)。
defined defined(value) 値が真と評価される場合、真と評価されます。値が RICOH ProcessDirector プロパティー名の場合、プロパティーがデータベースで定義されていると、この関数は真を返します。プロパティーがデータベースで定義されている場合は、他の CEL 関数でそのプロパティーを参照できます。
len len(string) 入力ストリングの文字数を返します。
nil nil CEL 関数でヌル値を表すために使用できる値を返します。
aggr [aggr=sum] [aggr=max] [aggr=min] ジョブ内のすべての文書に対して評価した式 (expr) の合計値、最大値、または最小値を返します。インサーター機能がインストールされている場合は、インサーター制御ファイルのヘッダーレコードの規則ファイルでこの関数を使用できます。

レコードコンテキスト関数

関数名 構文 説明
field_name field_name または field_name() コンテキスト内の現行レコードのフィールドの値。
recnum recnum または recnum() コンテキストで使用されている現行レコードのレコード番号。

レコードキャッシングコンテキスト関数

関数名 構文 説明
field_name field_name または field_name(offset) offset が 0 か欠落している場合は、コンテキスト内の現行レコードのフィールドの値。offset が正数であれば、offset より先のレコードのフィールドの値。offset が負の数値であれば、offset より前のレコードのフィールドの値。後方に現在キャッシュされているレコードの最大数は 10 です。前方に現在キャッシュされているレコードの数はどのような値でもかまいませんが、処理中に動的に決定されます。
recnum recnum または recnum() コンテキストで使用されている現行レコードのレコード番号。

説明
if(or(a>100,a==0),1,0) a の値が 100 よりも大きいか 0 に等しい場合、この式は 1 と評価されます。それ以外の場合は、0 と評価されます。
if(and(a>3,a<10),1,0) a の値が 3 よりも大きく、10 よりも小さい場合、この式は 1 と評価されます。そうではない場合は、0 と評価されます。
if(fld,fld,'') 欠落している値を空ストリングとして扱います。そうではない場合は、(空白値とは異なる) 未定義のものとして扱います。
fmtbase(if(output_bin=='2',1,0) + if(output_bin=='3',2,0) + if(meter == '1', 4,0) , 1) 16 進数を返します。ここで、低位ビット (右から) は output_bin が 2 に設定されているかどうかを示し、2 番目のビットは output_bin が 3 に設定されているかどうかを示し、3 番目のビットは meter が 1 に設定されたかどうかを示します。
fmtbase(if(meter=='2',1,0) + if(substr(mch_isrt_bins,0,1)=='Y',2,0) + if(substr(mch_isrt_bins,1,1)=='Y',4,0) , 1 ) 16 進数を返します。ここで、低位ビット (右から) は meter が 2 に設定されているかどうかを示し、2 番目のビットは mch_isrt_bins の最初の文字が 'Y' に設定されているかどうかを示し、3 番目のビットは mch_isrt_bins の 2 番目の文字が 'Y' に設定されたかどうかを示します。
fmtbase(63,2,"0123456789ABCDFGHJKLMNPQRSTVWXYZ") 63 を "1Z" に変換します。どのようなストリングでもベースとして使用できます。
tr('abc', 'b') 'b' 文字をすべて削除します。
tr('00101', '01', 'NY') '0' を 'N' に、'1' を 'Y' に変換します。結果は 'NNYNY' になります。
tr('00101', '0123456789Y', 'YYYYYYYYYYN') == 'YYYYY' 「00101」のすべての文字が数字である場合、trueと評価されます。「00101」は、5文字の関数値に置き換えることができます。
len(tr('00101','0')) 2 と評価されます。すべての '0' を入力ストリングから削除し、残った文字の長さを返します。入力ストリングの '1' の数を効果的にカウントすることになります。
[expr=Doc.TotalSheets] [aggr=sum] ジョブ内の全文書の Doc.TotalSheets プロパティーのすべての値の合計を返します。
[expr=Doc.TotalSheets] [aggr=max] ジョブ内の全文書の Doc.TotalSheets プロパティーの最大値を返します。
[expr=Doc.TotalSheets] [aggr=min] ジョブ内の全文書の Doc.TotalSheets プロパティーの最小値を返します。
[expr=recnum>1] ファイルの最初の行は無視します(1 より大きいレコード番号のみを読み取ります)。