Первоначальные исследования подтверждают, что язык выражения StreamBase или встроенные функции не имеют очевидного способа преобразования ints, представляющих знаковые символы ASCII, в односимвольную строку, соответствующую значению ASCII. Если я обнаружил некоторые неочевидные трюки, я вернусь и отредактирую этот ответ.
Я определенно не использовал бы выражение 255-if 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 затем два метода приходят на ум:
- Lo ad CSV-файл с int-> строковыми сопоставлениями в них в таблицу запросов и dto для поиска с помощью оператора Query Read, возможно, используя вкладку «Начальное содержимое», чтобы ссылаться на CSV-файл, поскольку ASCII не изменится в ближайшее время.
- Создайте константу списка, называемую, скажем, ASCII, которая имеет все строки, которые вы хотите преобразовать, и индексировать список по int. Например, в операторе Map do добавьте c ASCII [i] и добавьте некоторую границу проверки логики (возможно, в пользовательскую функцию).
Раскрытие информации/Ограничение ответственности: Я являюсь сотрудником TIBCO Software, Inc. Мнения, выраженные здесь, являются моими собственными, а не TIBCO.
Адам. Вы можете немного уточнить свой вопрос? Похоже, у вас есть строки, которые выглядят как числа, входящие в систему, а затем вы хотите преобразовать их в одну строку символов, которая соответствует символу ASCII, даже несмотря на то, что число во входящей строке действительно соответствует символу ASCII в нижнем регистре? Есть ли общий алгоритм преобразования, который вы можете выразить? Поскольку ответ о том, как лучше сделать это на языке выражения StreamBase EventFlow, будет зависеть от того, что вы на самом деле хотите сделать. – sbarber2
Извините. По сути, у меня есть коды символов ASCII, транслируемые в (http://ascii.cl/), так, например, целое число 89 соответствует букве Y. Меня не беспокоит случай, как правило, хочет конвертировать потоки целые числа в соответствующие символы ASCII. Есть ли встроенная утилита для этого или мне нужно определить собственное сопоставление? –