如何在 Streambase 中将 ASCII 整数转换为字符串?
How to convert ASCII integers to string in 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 中有更好的方法吗?
初步调查证实,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 中,那么可以考虑两种方法:
- 将其中包含 int -> 字符串映射的 CSV 文件加载到查询中 Table 并使用查询读取运算符进行查找,可能使用“初始内容”选项卡来引用 CSV 文件,因为 ASCII 不是很快就会改变。
- 创建一个名为 ASCII 的列表常量,其中包含您要转换为的所有字符串并按 int 索引列表。例如,在 Map 运算符中执行 Add c ASCII[i],并添加一些边界检查逻辑(可能在用户函数中)。
Disclosure/Disclaimer:我是 TIBCO Software, Inc. 的员工。这里表达的观点是我自己的,而不是 TIBCO 的。
我正在使用 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 中有更好的方法吗?
初步调查证实,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 中,那么可以考虑两种方法:
- 将其中包含 int -> 字符串映射的 CSV 文件加载到查询中 Table 并使用查询读取运算符进行查找,可能使用“初始内容”选项卡来引用 CSV 文件,因为 ASCII 不是很快就会改变。
- 创建一个名为 ASCII 的列表常量,其中包含您要转换为的所有字符串并按 int 索引列表。例如,在 Map 运算符中执行 Add c ASCII[i],并添加一些边界检查逻辑(可能在用户函数中)。
Disclosure/Disclaimer:我是 TIBCO Software, Inc. 的员工。这里表达的观点是我自己的,而不是 TIBCO 的。