ABAP:concat_lines_of()用于原始字符串

时间:2019-05-09 13:17:12

标签: sap abap

我正在转换一些代码。过去使用过字符串,现在应该使用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)

2 个答案:

答案 0 :(得分:4)

经典的请求是将一个字节表连接成一个字节串,这样,添加逗号来标识原始行是没有意义的,因为不可能将逗号存储为字符(替代:对其进行编码)在给定的代码页中。

如果问题仅是经典的要求,那么XSTRING类型的CONCAT_LINES_OF就不存在。

一种解决方法是使用REDUCE

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'.

答案 1 :(得分:2)

鉴于您有以下输入内容:

  • 一个字节字符串表,其中包含在给定代码页中编码的字符
  • 给定代码页的名称
  • 用于分隔输出中每一行的分隔符

您想要此输出:

  • 在给定的代码页中包含分隔符连接和分隔的所有行的字节字符串

这可以使用以下代码实现:

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.