32 раза уже скачали,
Пару нюансов.
Я использовал методы класса
CL_UMC_OSTREAM=>XSTR2TAB
CL_UMC_OSTREAM=>TAB2XSTR
по всей видимости они реализованы начиная с ECC 6.0
их можно заменить:
Code:
form XSTR2TAB tables ET_DATA
using I_XSTR type xstring
E_LENGTH type i.
data:
l_times type i,
l_pos type i value 0,
l_last_line_len type i,
l_tab_line_len type i,
lr_type_descr type ref to cl_abap_typedescr,
lr_tab_descr type ref to cl_abap_tabledescr.
field-symbols:
<ls_data> type any,
<ls_line> type any.
e_length = xstrlen( i_xstr ).
lr_type_descr = cl_abap_typedescr=>describe_by_data( et_data ).
lr_tab_descr ?= lr_type_descr.
lr_type_descr = lr_tab_descr->GET_TABLE_LINE_TYPE( ).
l_tab_line_len = lr_type_descr->length.
l_times = e_length div l_tab_line_len.
l_last_line_len = e_length mod l_tab_line_len.
do l_times times.
append initial line to et_data.
read table et_data assigning <ls_data> index sy-tabix.
assign component 1 of structure <ls_data> to <ls_line>.
<ls_line> = i_xstr+l_pos(l_tab_line_len).
l_pos = l_pos + l_tab_line_len.
enddo.
if l_last_line_len <> 0.
append initial line to et_data.
read table et_data assigning <ls_data> index sy-tabix.
assign component 1 of structure <ls_data> to <ls_line>.
<ls_line> = i_xstr+l_pos(l_last_line_len).
endif.
endform.
В место
CALL METHOD cl_umc_ostream=>xstr2tab
EXPORTING
i_xstr = xstrt
IMPORTING
et_data = blob[]
e_length = blob_length.
Напиши
Perform XSTR2TAB tables blob using xstrt blob_length.
form TAB2XSTR tables IT_DATA
using I_LENGTH type i
E_XSTR type XSTRING.
data:
l_length type i,
l_xstr type xstring.
field-symbols:
<ls_data> type any,
<ls_line> type any.
loop at it_data assigning <ls_data>.
assign component 1 of structure <ls_data> to <ls_line>.
concatenate l_xstr <ls_line> into l_xstr in byte mode.
endloop.
l_length = xstrlen( l_xstr ).
if l_length > i_length.
e_xstr = l_xstr(i_length).
else.
e_xstr = l_xstr.
endif.
endform.