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.
3 Réponses :
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.
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.
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.
sy-tabix n'est jamais modifié dans votre échantillon donc LOOP at it_1
n'est jamais exécuté
Question également posée sur SCN: answers.sap.com/questions/738594/...