Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

tab delimited text file

Former Member
0 Likes
2,731

can gui_upload be used to upload a tab delimited text file. if yes, then how the data that is uploaded can be split at the delimiter

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,839

Hi Vijay,

Check the code below.

Hope This Info Helps YOU.

<i>Reward Points If It Helps YOU.</i>

Regards,

Raghav


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.

5 REPLIES 5
Read only

Former Member
0 Likes
1,840

Hi Vijay,

Check the code below.

Hope This Info Helps YOU.

<i>Reward Points If It Helps YOU.</i>

Regards,

Raghav


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.

Read only

Former Member
0 Likes
1,839

Hai,

You just upload the entire line as a single variable.

Say str is the variable containing your line item.

Now you can split it in 2 ways.

The easiest way is

SPLIT STR AT ' ' INTO ITAB.(an internal table or structure).

Else.

If you know the length of each individual field you can split like say FIELD1 = STR+2(10) which would give the 10 characters starting from third character and so on.

Read only

Former Member
0 Likes
1,839

Hi,

GUI_UPLOAD works the same as WS_UPLOAD. Giev the HAS_FIELD separator option to upload DAT files

Shobana

Read only

Former Member
0 Likes
1,839

hi ,

with out splitting the file you can upload using the below FM.

KCD_CSV_FILE_TO_INTERN_CONVERT

for this pass the filepath, delimiter as '#'

it will upload the data to internaltable.

Regards

vijay

Read only

jayanthi_jayaraman
Active Contributor
0 Likes
1,839

Hi,

Here is the sample code.Kindly reward points by clicking the star on the left of reply,if it helps.

data G_FILE1 TYPE STRING.

DATA: BEGIN OF T_INPUT OCCURS 0, " Flat file data

...

END OF T_INPUT.

G_FILE1 = P_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = G_FILE1

FILETYPE = 'ASC'

HAS_FIELD_SEPARATOR = 'X'

TABLES

DATA_TAB = T_INPUT

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 <> 0.

MESSAGE E000 WITH 'Error in Upload'.

ENDIF.