1
votes

Comment fractionner plusieurs fois dans abap?

Je veux diviser mon code en une zone de travail et l'ajouter à une table interne pour une exécution ultérieure.

Mais parfois, le texte contient plus de 3 chiffres, par exemple 3; 5; 3; 6; 2; 5 mais son toujours 3,6,9,12 ... nombre. Comment puis-je résoudre le problème que je souhaite répéter 3 fois, puis les 3 prochains nombres et ainsi de suite?

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.


1 commentaires

Question également posée sur SCN: answers.sap.com/questions/738594/...


3 Réponses :


4
votes

Vous devez utiliser l'ajout INTO TABLE au mot-clé split plutôt que de coder en dur les champs.

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.


0 commentaires

1
votes

Cela divisera la chaîne en 3 blocs, tout en l'écrasant par le reste:

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.

Veuillez noter que la variable de chaîne text sera initiale à à la fin, si sa valeur d'origine est toujours nécessaire, vous pouvez définir une autre chaîne, copier la valeur et utiliser celle-ci pour le fractionnement.


0 commentaires

-1
votes

Vous pouvez essayer d'utiliser Sy-tabix si vous souhaitez contrôler les itérations trois fois et que vous enregistrez les valeurs de texte dans 3 tables internes différentes.

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.


1 commentaires

sy-tabix n'est jamais modifié dans votre échantillon donc LOOP at it_1 n'est jamais exécuté