初期調査では、StreamBase Expression Language または組み込み関数には、ASCII 文字値を表す int を ASCII 値に対応する 1 文字の文字列に変換する明確な方法がないことが確認されています。後で発見した自明ではないトリックがある場合は、戻ってこの回答を編集します。
255 節の if/then/else 式は絶対に使用しません。
私はおそらくJava関数を使用するでしょう。これは私が軽くテストした例です:
package example;
public class ASCIIIntToString {
public static String ASCIIToString(Integer a) {
if (a == null || a < 0 || a > 255) {
return null;
} else {
return Character.toString((char) (int) a);
}
}
}
sbd.sbconf にドロップするカスタム関数の宣言は次のようになります。
<custom-functions>
<custom-function alias="ASCIIToString"
args="auto"
class="example.ASCIIIntToString"
language="java"
name="ASCIIToString"
type="simple"/>
</custom-functions>
しかし、Java に移行せずに EventFlow にとどまりたい場合は、次の 2 つの方法が思い浮かびます。
- int -> string マッピングを含む CSV ファイルをクエリ テーブルにロードし、Query Read 演算子を使用してルックアップします。ASCII はすぐには変更されないため、[Initial Contents] タブを使用して CSV ファイルを参照します。
- 変換したいすべての文字列を含むASCIIなどと呼ばれるリスト定数を作成し、intでリストにインデックスを付けます。たとえば、Map 演算子では Add c ASCII[i] を実行し、いくつかの境界チェック ロジックを (おそらくユーザー関数で) 追加します。
開示/免責事項: 私は TIBCO Software, Inc. の従業員です。ここで表明された意見は私自身のものであり、TIBCO のものではありません。