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

Abap 如何将字符数字转换为数字格式?,abap,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为字符格式 任何可能的解决方案?您可以通过将节点的数字部分转换为一个数字并在增加后将其写回来实现这一点。简单示例代码: DATA: l_node TY

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

例如: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.
输出为:


ABAP版本是700,因此这是“旧”语法,但应适用于较新版本。

此版本与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

你试过什么代码?我正在考虑使用一种方法,首先将字符格式转换为数字格式,然后对数字进行操作。在执行某些递增操作后,将结果数字追加到我分隔的字符中。虽然我不知道如何做到这一点。你能帮忙吗?
l\u node+10(*)
l\u node+10
之间有什么区别吗?我不知道。我已经习惯了这种语法。:)有一次,由于引用变量变短(我认为数据元素发生了变化)而导致程序转储,并且程序没有遵循变化,因此固定长度版本中断。这就是我开始使用这种语法的原因。对我来说意味着剩下的部分。更清楚,谢谢@szako。现在,我指的是lausek代码。也许对于其他场景它会很有用。谢谢,我想它会起作用的,我今天就来试一试。再次感谢:)是的,我知道。。。我也很难过