如何在Streambase中将ASCII整数转换为字符串?

时间:2015-10-05 18:55:42

标签: streambase

我正在使用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中有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

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

如果/ then / else表达式,我肯定不会使用255子句!

我可能会使用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加载CSV文件 - &gt;将字符串映射到查询表中并使用“查询读取”操作符进行查找,可能使用“初始内容”选项卡引用CSV文件,因为ASCII不会很快发生变化。
  2. 创建一个名为ASCII的列表常量,它包含要转换为的所有字符串,并通过int索引列表。例如,在Map运算符中执行Add c ASCII [i],并添加一些边界检查逻辑(可能在用户函数中)。
  3. 披露/免责声明:我是TIBCO Software,Inc。的员工。此处表达的意见是我自己的,而不是TIBCO。