Lors de la création d'une interface sortante de SAP, on peut être amené à extraire un fichier plat au format texte avec un séparateur particulier : la tabulation.

A partir de la version 4.7 de SAP, on peut définir une variable ou une constante de type CHAR avec comme valeur "cl_abap_char_utilities=>horizontal_tab".

 

 

Une des méthodes assez simple pour modulariser l'extraction d'une table interne dans un fichier texte avec un séparateur tabulation consiste à définir une variable de type CHAR d'une longueur suffisamment importante pour contenir toutes les valeurs des champs d'une ligne de la table interne, puis d'utiliser les field-symbols comme suit :

On rappelle que les field symbols sont écrits ici avec des "" au lieu des habituels signes inférieurs et supérieurs qui sont interprétés comme des balises par l'éditeur.

L'exemple suivant est fait avec la table MARA, toute autre table interne peut évidemment être utilisée.

*********Déclaration des variables

TYPES : BEGIN OF ty_data,
data(5000),
END OF ty_data.

FIELD-SYMBOLS :  "l_field" TYPE ANY.

DATA : i_data TYPE ty_data,
l_extract LIKE mara,
c_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.

DATA :  w_data TYPE TABLE OF ty_data WITH HEADER LINE.

DATA : BEGIN OF extract OCCURS 10.
INCLUDE STRUCTURE MARA.
DATA : END OF extract.

*********Début de la routine

LOOP AT extract INTO l_extract.

DO.
*********Chaque champ de la structure est lu un à un et transféré dans le fiel symbol
ASSIGN COMPONENT sy-index OF STRUCTURE l_extract TO "l_field".

IF NOT sy-subrc IS INITIAL.

EXIT.

ENDIF.

IF sy-index EQ 1.
*********le field-symbol est transféré dans une variable temporaire
MOVE "l_field" TO i_data.

ELSE.
*********on ajoute le séparateur à la variable
CONCATENATE i_data "l_field" INTO i_data SEPARATED BY c_tab.

ENDIF.

ENDDO.

*********une fois toutes les valeurs de la ligne de la table interne transférées et séparées correctement on les met dans une table interne qui sera ensuite copiée dans un fichier texte

APPEND i_data TO data.
CLEAR :  i_data.

ENDLOOP.