2015-10-05 3 views
0

Я использую streambase и создал карту для преобразования входящих целых чисел (0-255) в коды символов. Прямо сейчас, я использую инструкции if/else. Например:Как преобразовать целые числа ASCII в строку в Streambase?

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

Однако я хотел бы просто использовать это в более общем плане. Поиск справки Streambase Studio на самом деле ничего не давал, насколько я мог судить. Я знаю, что это можно сделать на Java, но, вероятно, потребуется вызвать внешнюю функцию java. Я не настолько компетентен в этом, так что я немного потерял.

Есть ли лучший способ сделать это в StreamBase?

+0

Адам. Вы можете немного уточнить свой вопрос? Похоже, у вас есть строки, которые выглядят как числа, входящие в систему, а затем вы хотите преобразовать их в одну строку символов, которая соответствует символу ASCII, даже несмотря на то, что число во входящей строке действительно соответствует символу ASCII в нижнем регистре? Есть ли общий алгоритм преобразования, который вы можете выразить? Поскольку ответ о том, как лучше сделать это на языке выражения StreamBase EventFlow, будет зависеть от того, что вы на самом деле хотите сделать. – sbarber2

+0

Извините. По сути, у меня есть коды символов ASCII, транслируемые в (http://ascii.cl/), так, например, целое число 89 соответствует букве Y. Меня не беспокоит случай, как правило, хочет конвертировать потоки целые числа в соответствующие символы ASCII. Есть ли встроенная утилита для этого или мне нужно определить собственное сопоставление? –

ответ

1

Первоначальные исследования подтверждают, что язык выражения 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 затем два метода приходят на ум:

  1. Lo ad CSV-файл с int-> строковыми сопоставлениями в них в таблицу запросов и dto для поиска с помощью оператора Query Read, возможно, используя вкладку «Начальное содержимое», чтобы ссылаться на CSV-файл, поскольку ASCII не изменится в ближайшее время.
  2. Создайте константу списка, называемую, скажем, ASCII, которая имеет все строки, которые вы хотите преобразовать, и индексировать список по int. Например, в операторе Map do добавьте c ASCII [i] и добавьте некоторую границу проверки логики (возможно, в пользовательскую функцию).

Раскрытие информации/Ограничение ответственности: Я являюсь сотрудником TIBCO Software, Inc. Мнения, выраженные здесь, являются моими собственными, а не TIBCO.

+0

Спасибо, я ценю это! Я постараюсь включить java-функцию (что-то мне нужно научиться в любом случае). PS, есть ли у вас какие-либо примеры фигурных графиков с использованием путей SVG, которые я мог бы брать, чтобы потрогать? –

+0

Адам и я взяли вопрос SVG в автономном режиме. – sbarber2

+0

Что такое пакет «пример»? Другими словами, зачем нужно объявлять пакет? –