ABAP code for uploading a TAB delimited file into an internal table. See code below for structures. The code is base on uploading a simple txt file.
*&---------------------------------------------------------------------* *& Report ZUPLOADTAB * *& * *&---------------------------------------------------------------------* *& Example of Uploading tab delimited file * *&---------------------------------------------------------------------* REPORT zuploadtab . PARAMETERS: p_infile LIKE rlgrap-filename OBLIGATORY DEFAULT '/usr/sap/'.. *DATA: ld_file LIKE rlgrap-filename. DATA: gd_file type string. *Internal tabe to store upload data TYPES: BEGIN OF t_record, name1 LIKE pa0002-vorna, name2 LIKE pa0002-name2, age TYPE i, END OF t_record. DATA: it_record TYPE STANDARD TABLE OF t_record INITIAL SIZE 0, wa_record TYPE t_record. *Internal table to upload data into DATA: BEGIN OF it_datatab OCCURS 0, row(500) TYPE c, END OF it_datatab. *Text version of data table TYPES: BEGIN OF t_uploadtxt, name1(10) TYPE c, name2(15) TYPE c, age(5) TYPE c, END OF t_uploadtxt. DATA: wa_uploadtxt TYPE t_uploadtxt. *String value to data in initially. DATA: wa_string(255) TYPE c. CONSTANTS: con_tab TYPE x VALUE '09'. *If you have Unicode check active in program attributes then you will *need to declare constants as follows: *class cl_abap_char_utilities definition load. *constants: * con_tab type c value cl_abap_char_utilities=>HORIZONTAL_TAB. ************************************************************************ *AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_INFILE. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_infile. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING def_filename = p_infile mask = ',*.txt.' mode = 'O' title = 'Upload File'(078) IMPORTING filename = p_infile EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. ************************************************************************ *START-OF-SELECTION START-OF-SELECTION. gd_file = p_infile. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = gd_file has_field_separator = 'X' "file is TAB delimited TABLES data_tab = it_record EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 OTHERS = 17. IF sy-subrc NE 0. write: 'Error ', sy-subrc, 'returned from GUI_UPLOAD FM'. skip. endif. * Alternative method, where by you split fields at each TAB after you * have returned the data. No point unless you dont have access to * GUI_UPLOAD but just included for information * * CALL FUNCTION 'GUI_UPLOAD' * EXPORTING * filename = gd_file * filetype = 'ASC' * TABLES * data_tab = it_datatab "ITBL_IN_RECORD[] * EXCEPTIONS * file_open_error = 1 * OTHERS = 2. * IF sy-subrc NE 0. * ELSE. * LOOP AT it_datatab. * CLEAR: wa_string, wa_uploadtxt. * wa_string = it_datatab. * SPLIT wa_string AT con_tab INTO wa_uploadtxt-name1 * wa_uploadtxt-name2 * wa_uploadtxt-age. * MOVE-CORRESPONDING wa_uploadtxt TO wa_record. * APPEND wa_record TO it_record. * ENDLOOP. * ENDIF. ************************************************************************ *END-OF-SELECTION END-OF-SELECTION. *!! Text data is now contained within the internal table IT_RECORD * Display report data for illustration purposes LOOP AT it_record INTO wa_record. WRITE:/ sy-vline, (10) wa_record-name1, sy-vline, (10) wa_record-name2, sy-vline, (10) wa_record-age, sy-vline. ENDLOOP.