如何在abap中拆分多次?

如何在abap中拆分多次?,abap,Abap,我想将代码分割成一个工作区,并将其附加到一个内部表中,以便以后执行 但有时文本包含3个以上的数字,例如3;5.3.6.2.但它总是3,6,9,12。。。数字我如何解决这个问题,我想循环3次,然后是接下来的3个数字,依此类推 DATA: text(100) type c, it_1 TYPE STANDART TABLE LIKE text, it_2 TYPE STANDART TABLE LIKE text, it_3 TYPE STANDART TABLE LIKE text, string

我想将代码分割成一个工作区,并将其附加到一个内部表中,以便以后执行

但有时文本包含3个以上的数字,例如3;5.3.6.2.但它总是3,6,9,12。。。数字我如何解决这个问题,我想循环3次,然后是接下来的3个数字,依此类推

DATA: text(100) type c,
it_1 TYPE STANDART TABLE LIKE text,
it_2 TYPE STANDART TABLE LIKE text,
it_3 TYPE STANDART TABLE LIKE text,
string(100) TYPE c.


text = '123;2;2'.

SPLIT text AT ';' INTO  wa_1-c1 wa_1-c2 wa_1-c3.

APPEND wa_1-c1 to it_1.
APPEND wa_1-c2 to it_2.
APPEND wa_1-c3 to it_3.

LOOP at it_1 INTO string.
PERFORM task using string.
ENDLOOP.
您应该将INTO表添加到split关键字中,而不是对字段进行硬编码

DATA: text_s TYPE string.

text_s = '123;2;2'.

DATA: text_tab TYPE TABLE OF string.

SPLIT text_s AT ';' INTO TABLE text_tab.

LOOP AT text_tab ASSIGNING FIELD-SYMBOL(<line>).

  "do whatever on each token here

ENDLOOP.
您应该将INTO表添加到split关键字中,而不是对字段进行硬编码

DATA: text_s TYPE string.

text_s = '123;2;2'.

DATA: text_tab TYPE TABLE OF string.

SPLIT text_s AT ';' INTO TABLE text_tab.

LOOP AT text_tab ASSIGNING FIELD-SYMBOL(<line>).

  "do whatever on each token here

ENDLOOP.

这将把字符串分割成3-er块,同时用其余的块覆盖它:

WHILE text IS NOT INITIAL.
  SPLIT AT ';'
        INTO wa_1-c1
             wa_1-c2
             wa_1-c3
             text.
  APPEND: wa_1-c1 to it_1,
          wa_1-c2 to it_2,
          wa_1-c3 to it_3.
ENDWHILE.

请注意,如果仍然需要字符串变量文本的原始值,则字符串变量文本将在结尾处以首字母开头,然后您可以定义另一个字符串,复制该值并使用该字符串进行拆分。

这将将字符串拆分为3-er块,同时用其余部分覆盖:

WHILE text IS NOT INITIAL.
  SPLIT AT ';'
        INTO wa_1-c1
             wa_1-c2
             wa_1-c3
             text.
  APPEND: wa_1-c1 to it_1,
          wa_1-c2 to it_2,
          wa_1-c3 to it_3.
ENDWHILE.

请注意,字符串变量文本将在末尾以首字母开头,如果仍然需要其原始值,则您可以定义另一个字符串,复制该值并将其用于拆分。

如果要控制迭代三次,并且要将文本值保存在3个不同的内部表中,可以尝试使用Sy tabix

DATA: text(100) type c,
it_1 TYPE STANDARD TABLE OF text,
it_2 TYPE STANDARD TABLE OF text,
it_3 TYPE STANDARD TABLE OF text,
string(100) TYPE c.

text = '123;2;2'.

SPLIT text AT ';' INTO  TABLE it_1.

LOOP at it_1 INTO string WHERE sy-tabix = 3.
WRITE : string.
ENDLOOP.
 if sy-tabix = 3.
   LOOP AT it_2 INTO string WHERE sy-tabix = sy-tabix+3.
     "do the next loop    
     ENDLOOP.
   ENDIF.

如果要控制迭代三次,并且要将文本值保存在3个不同的内部表中,那么可以尝试使用Sy-tabix

DATA: text(100) type c,
it_1 TYPE STANDARD TABLE OF text,
it_2 TYPE STANDARD TABLE OF text,
it_3 TYPE STANDARD TABLE OF text,
string(100) TYPE c.

text = '123;2;2'.

SPLIT text AT ';' INTO  TABLE it_1.

LOOP at it_1 INTO string WHERE sy-tabix = 3.
WRITE : string.
ENDLOOP.
 if sy-tabix = 3.
   LOOP AT it_2 INTO string WHERE sy-tabix = sy-tabix+3.
     "do the next loop    
     ENDLOOP.
   ENDIF.

SCN上也有问题:SCN上也有问题:sy tabix在您的示例中从未更改,所以它的循环_1从未执行sy tabix在您的示例中从未更改,所以它的循环_1从未执行