如何在SAP ABAP中将字符数字转换为数字格式?

时间:2017-06-29 06:21:15

标签: sap abap

我正在尝试将一些字符串转换为数字形式,然后进一步递增它。 例如: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是字符格式。

任何可能的解决方案?

2 个答案:

答案 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.

输出结果为:

enter image description here

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