Значения в Informix 4gl Language

У меня есть поле под названием «UCN», которое имеет 6 символов. Это поле может иметь как символ, так и числовое значение, например «A123Y5», «12345Y» или «G23561», что-то вроде этого.

Нам нужно распечатать данные отсюда с Pipe как A|1|2|3|Y|5.

Я могу поместить Integer с ключевым словом «using», но не могу собрать их вместе.

Пожалуйста, если кто-нибудь может помочь Мукешу


person Mukesh    schedule 26.07.2016    source источник


Ответы (3)


Я не думаю, что есть короткий путь. Тебе нужно:

PRINT ucn[1], '|', ucn[2], '|', ucn[3], '|', ucn[4], '|', ucn[5], '|', ucn[6]

Если бы он был немного длиннее, вместо этого вы могли бы использовать цикл; в этом есть своя изюминка.

person Jonathan Leffler    schedule 27.07.2016

Если вы работаете на того, на кого, я думаю, вы работаете, я могу дать вам ответ, используя некоторые расширения Genero для 4GL. Создайте библиотечную функцию, например...

FUNCTION insert_between_each_char(str,delimiter)
DEFINE str STRING
DEFINE delimiter CHAR(1)

DEFINE sb base.StringBuffer
DEFINE i INTEGER

    LET sb = base.StringBuffer.create()
    CALL sb.append(str)
    FOR i = sb.getLength() TO 2 STEP -1
        CALL sb.insertAt(i,delimiter)
    END FOR
    RETURN sb.toString()
END FUNCTION

... и тогда ваш код становится

PRINT insert_between_each_char(ucn,"|")
person fourjs.reuben    schedule 27.07.2016

Вот код для цикла, как упомянуто Джонатаном:

   DEFINE 
      l_result   char(512),
      l_sel      LIKE table.UCN,
      i          integer

     LET l_sel = "A123Y5" #Or select into l_sel

     FOR i = 1 to length(l_sel)
        IF i < length(l_sel)
        THEN
           LET l_result = l_result, l_sel[i], "|"
        END IF
     END FOR

     PRINT l_result
person Moses Davidowitz    schedule 23.08.2016