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