0

我正在使用 streambase,并创建了一个映射来将传入的整数 (0-255) 转换为字符代码。现在,我正在使用手动 if/else 语句。例如:

    if (message_code == '106') then 
        message_code = 'J'
    else if (message_code == '110') then
         message_code= 'N'

但是,我想更普遍地使用它。据我所知,搜索 Streambase Studio 帮助并没有真正提供任何帮助。我知道这可以在 Java 中完成,但可能需要调用 java 外部函数。我在这方面不是很胜任,所以有点失落。

在 StreamBase 中有没有更好的方法来做到这一点?

4

1 回答 1

1

初步调查证实,StreamBase 表达式语言或内置函数没有明显的方法将表示 ASCII 字符值的整数转换为对应于 ASCII 值的单字符字符串。如果我以后发现了一些不明显的技巧,我会回来编辑这个答案。

我绝对不会使用 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 中,那么会想到两种方法:

  1. 将包含 int -> string 映射的 CSV 文件加载到 Query Table 中,并使用 Query Read 运算符进行查找,可能使用 Initial Contents 选项卡来引用 CSV 文件,因为 ASCII 不会很快改变。
  2. 创建一个名为 ASCII 的列表常量,其中包含要转换的所有字符串,并按 int 索引列表。例如,在 Map 运算符中添加 c ASCII[i],并添加一些边界检查逻辑(可能在用户函数中)。

披露/免责声明:我是 TIBCO Software, Inc. 的员工。此处表达的观点是我自己的观点,与 TIBCO 无关。

于 2015-10-06T20:50:05.863 回答