Abap 使()的concat_行为rawstring工作
我正在转换一些代码。过去使用字符串,现在应该使用rawstring 这对string有效,但现在对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
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.