Как мне разделить несколько раз в abap? - PullRequest
0 голосов
/ 24 января 2019

Я хочу разбить свой код на рабочую область и добавить его во внутреннюю таблицу для последующего выполнения.

Но иногда текст содержит более 3 чисел, например 3; 5; 3; 6;2; 5 но всегда 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.

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Это разделит строку на 3 блока, перезаписав ее остальными:

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.

Обратите внимание, что строковая переменная text будет исходной в конце, если ее исходное значение все еще необходимо, чем вы можете определить другую строку, скопировать значение и использовать его для разделения.

0 голосов
/ 26 января 2019

Вы можете попробовать использовать Sy-tabix, если вы хотите управлять итерациями три раза и поскольку вы сохраняете текстовые значения в 3 разных внутренних таблицах.

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.
0 голосов
/ 24 января 2019

Вы должны использовать дополнение INTO TABLE к ключевому слову 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.
...