Заставьте concat_lines_of () работать для rawstring

Я конвертирую код. Раньше использовалась строка, теперь следует использовать rawstring.

Это работало со строкой, но теперь не работает с rawstring:

data my_table TYPE TABLE OF rawstring.
concat_lines_of( table = my_table sep = `, `)

Как заставить работать вышеперечисленные строки? В моем случае rawstring содержит данные в кодировке utf8. Результатом должна быть xstring (последовательность байтов)

Здесь это не имеет значения, но в Python это будет выглядеть так:

my_list = [my_byte_sequence1, my_byte_sequence2, my_byte_sequence3]
big_byte_sequence = b', '.join(my_list)

person guettli    schedule 09.05.2019    source источник


Ответы (2)


Классический запрос состоит в том, чтобы просто объединить таблицу байтов в строку байтов, таким образом добавление запятой для идентификации исходных строк не имеет смысла, потому что невозможно сохранить запятую как символ (альтернатива: закодировать ее в заданном кодовая страница).

Если вопрос - просто классический запрос, то нет эквивалента _ 1_ для типа XSTRING.

Один из обходных путей - использовать _3 _ а>:

DATA my_table TYPE TABLE OF xstring.

my_table = VALUE #( ( CONV #( '01FF' ) ) ( CONV #( 'BEEF' ) ) ).

DATA(my_xstring) = REDUCE #(
      INIT aux TYPE xstring
      FOR <x> IN my_table
      NEXT aux = COND #( WHEN aux IS INITIAL THEN <x> ELSE aux && <x> ) ).

ASSERT my_xstring = '01FFBEEF'.
person Sandra Rossi    schedule 09.05.2019
comment
Спасибо за ваш ответ. , между строками отсутствует. Как попасть между строк? - person guettli; 10.05.2019
comment
Я не обратил внимания на запятую в вашем вопросе. Классический запрос - просто объединить таблицу байтов в строку байтов, поэтому запятая не имеет смысла. Если ваш вопрос состоит в том, чтобы объединить таблицу байтов в строку символов с байтами, представленными в шестнадцатеричном формате, и запятой между ними, то мой ответ неверен. Позвольте мне исправить это и опубликовать другой ответ. - person Sandra Rossi; 10.05.2019

Учитывая, что у вас есть эти входные данные:

  • таблица байтовых строк, содержащих символы, закодированные в данной кодовой странице
  • имя данной кодовой страницы
  • символ-разделитель, используемый для разделения каждой строки в выводе

Вам нужен этот результат:

  • строка байтов, содержащая все строки, соединенные и разделенные разделителем в данной кодовой странице

Этого можно добиться с помощью этого кода:

TYPES ty_table TYPE STANDARD TABLE OF xstring WITH EMPTY KEY.
DATA: my_table   TYPE ty_table,
      my_xstring TYPE xstring.

my_table = VALUE #( ( CONV #( '01FF' ) ) ( CONV #( 'BEEF' ) ) ).
PERFORM proc USING my_table `, ` 'UTF-8' CHANGING my_xstring.
ASSERT my_xstring = '01FF2C20BEEF'.


FORM proc 
      USING
        itab       TYPE ty_table 
        sep        TYPE csequence 
        codepage   TYPE string
      CHANGING
        my_xstring TYPE xstring.

  DATA(xsep) = cl_abap_codepage=>convert_to( source = sep codepage = codepage ).

  my_xstring = REDUCE #(
      INIT aux TYPE xstring
      FOR <x> IN my_table
      NEXT aux = COND #( WHEN aux IS INITIAL THEN <x> ELSE |{ aux }{ xsep }{ <x> }| ) ).

ENDFORM.
person Sandra Rossi    schedule 10.05.2019
comment
В моем случае rawstring содержит данные в кодировке utf8. Я не хочу преобразования двоичного кода в читаемый ascii. Результатом должна быть xstring (последовательность байтов). - person guettli; 10.05.2019
comment
OK. Ответ скорректирован в соответствии с вашим вопросом. - person Sandra Rossi; 10.05.2019