Abap 使()的concat_行为rawstring工作

Abap 使()的concat_行为rawstring工作,abap,Abap,我正在转换一些代码。过去使用字符串,现在应该使用rawstring 这对string有效,但现在对rawstring无效: data my_table TYPE TABLE OF rawstring. concat_lines_of( table = my_table sep = `, `) 如何使上述行工作?在我的例子中,rawstring包含utf8编码的数据。结果应该是一个xstring(字节序列) 这在这里并不重要,但在Python中,这看起来是这样的: my_list = [my_b

我正在转换一些代码。过去使用字符串,现在应该使用rawstring

这对string有效,但现在对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)

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

如果问题只是典型的请求,那么
XSTRING
类型就没有等价的

一种解决方法是使用:

DATA my_表类型xstring的表。
my#u table=VALUE#((CONV#('01FF'))(CONV#('BEEF')))。
数据(my_xstring)=减少#(
初始化辅助类型xstring
在我的桌子上
NEXT aux=COND#(当aux为初始值时,则为ELSE aux&&))。
断言my_xstring='01FFBEEF'。

如果您有这些输入:

  • 包含给定代码页中编码字符的字节字符串表
  • 给定代码页的名称
  • 用于分隔输出中每一行的分隔符
您需要以下输出:

  • 一个字节字符串,包含给定代码页中由分隔符连接和分隔的所有行
这可以使用以下代码实现:

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.
TYPES ty_table TYPE带有空键的xstring的标准表。
数据:my_表类型ty_表,
my_xstring类型xstring。
my#u table=VALUE#((CONV#('01FF'))(CONV#('BEEF')))。
使用my_table`、`UTF-8'更改my_xstring执行proc。
断言my_xstring='01FF2C20BEEF'。
表单进程
使用
itab型ty_表
sep型层序
代码页类型字符串
改变
my_xstring类型xstring。
数据(xsep)=cl\u abap\u代码页=>convert\u to(source=sep-codepage=codepage)。
my_xstring=REDUCE#(
初始化辅助类型xstring
在我的桌子上
NEXT aux=COND#(当aux是首字母时,则ELSE{aux}{xsep}{}}{124;)。
尾型。

谢谢您的回答。行之间的
丢失。你的问题中的逗号我没注意。经典的请求是将一个字节表连接成一个字节字符串,因此逗号是无意义的。如果您的问题是将一个字节表连接成一个字符串,其中字节用十六进制表示,中间用逗号表示,那么我的答案是不正确的。让我更正它并发布另一个答案。在我的例子中,rawstring包含utf8编码的数据。我不想从二进制转换成可读的ascii。结果应该是一个xstring(字节序列)。确定。根据您的问题调整答案。
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.