如何将字符数字转换为数字格式?

How to convert Character Numerals into Numeric format?

我正在尝试将一些字符字符串转换为数字形式,然后进一步递增它。

例如: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 为字符格式。

任何可能的解决方案?

可以通过将节点的数值部分转为数字,递增后写回来实现。简单示例代码:

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.

输出为:

A​​BAP 版本是 700,所以这是 "old" 语法,但应该适用于较新的版本。

这个像 szakos 一样不兼容 ABAP 700,但我想引入另一个解决方案:

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