我正在尝试将一些字符串转换为数字形式,然后进一步递增它。 例如:XX1-XXXXX.01.01.01.01应增加到XX1-XXXXX.01.01.01.02,如果到达XX1-XXXXX.01.01.01.99,则下一个增量应为XX1-XXXXX.01.01.02.00并继续下一个节点也。
XX1-XXXXX.01.01.01.01是字符格式。
任何可能的解决方案?
答案 0 :(得分:1)
您可以通过将节点的数字部分转换为数字并在增加后将其写回来实现此目的。简单示例代码:
DATA: l_node TYPE c LENGTH 21,
l_node_new TYPE c LENGTH 21,
l_help TYPE c LENGTH 11,
l_num TYPE n LENGTH 8,
l_node_pos TYPE int4,
l_num_pos TYPE int4.
l_node_new = l_node = 'XX1-XXXXX.01.01.01.01'.
l_help = l_node+10(*).
REPLACE ALL OCCURRENCES OF '.' IN l_help WITH ''.
CONDENSE l_help.
l_num = l_help.
DO 100 TIMES.
ADD 1 TO l_num.
ENDDO.
DO 4 TIMES.
l_node_pos = 10 + ( sy-index - 1 ) * 3.
l_num_pos = 0 + ( sy-index - 1 ) * 2.
l_node_new+l_node_pos(2) = l_num+l_num_pos(2).
ENDDO.
WRITE / l_node.
WRITE / l_node_new.
输出结果为:
ABAP版本是700,所以这是" old"语法,但应该适用于较新的版本。
答案 1 :(得分:1)
这个与ABAP 700不兼容,如szakos,但我想引入另一个解决方案:
FORM increment
CHANGING
fcw_out TYPE string.
DATA lw_as_n TYPE n LENGTH 8.
SPLIT fcw_out AT '.' INTO DATA(lw_start) DATA(lw_rest).
REPLACE ALL OCCURRENCES OF '.' IN lw_rest WITH ''.
lw_as_n = lw_rest + 1.
fcw_out = |{ lw_start }.{ lw_as_n(2) }.{ lw_as_n+2(2) }.{ lw_as_n+4(2) }.{ lw_as_n+6(2) }|.
ENDFORM.
" ------------------------------------------------
" Test run
" ------------------------------------------------
DATA(w_str) = `XX1-XXXXX.01.01.01.99`.
PERFORM increment CHANGING w_str. " ==> XX1-XXXXX.01.01.02.00