Jumat, 29 Juni 2012

Read .txt file to ITAB


Kali ini saya akan mencoba sharing bagaimana cara membaca file .txt untuk bisa dimasukkan ke dalam internal tabel. Mungkin ini bisa dikembangkan untuk dijadikan program upload data dari file .txt. OK, berikut source code untuk program read file .txt.


*&---------------------------------------------------------------------*
*& Report  ZREAD_TXT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zread_txt.
DATA: BEGIN OF itab OCCURS 0,
      matnr TYPE matnr,
      matkl TYPE matkl,
      meins TYPE meins,
      maktx TYPE maktx,
  END OF itab.

SELECTION-SCREEN BEGIN OF BLOCK g1 WITH FRAME TITLE text_101.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_102 FOR FIELD p_file.
PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK g1.

AT SELECTION-SCREEN OUTPUT.
  text_101 = 'Selection parameter'.
  text_102 = 'Chose .*txt file'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM f_get_filename CHANGING p_file.

START-OF-SELECTION.
  PERFORM fm_read_data.
  PERFORM fm_display_data.




*&---------------------------------------------------------------------*
*&      Form  f_get_filename
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FC_FILE    text
*----------------------------------------------------------------------*
FORM f_get_filename CHANGING fc_file.
  DATA ld_loc  LIKE dxfields-location.
  DATA ld_path LIKE dxfields-longpath." value '/usr/sap'.

  CALL FUNCTION '/SAPDMC/LSM_F4_FRONTEND_FILE'
    CHANGING
      pathfile         = fc_file
    EXCEPTIONS
      canceled_by_user = 1
      system_error     = 2
      OTHERS           3.
  IF sy-subrc <> 0.

  ENDIF.
ENDFORM. " F_GET_FILENAME


*&---------------------------------------------------------------------*
*&      Form  fm_read_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_read_data.
  DATA: lfilename TYPE string.

  lfilename = p_file.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                = lfilename
      filetype                = 'ASC'
      has_field_separator     = 'X'
    TABLES
      data_tab                = itab
    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 ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    "fm_read_data



*&---------------------------------------------------------------------*
*&      Form  fm_display_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_display_data .
  LOOP AT itab.
    WRITE : / itab-matnr,
              itab-matkl,
              itab-meins,
              itab-maktx.
  ENDLOOP.
ENDFORM.                    "fm_display_data





Oh ya lupa, format .txt harus sama dengan urut - urutannya internal tabel yang dibuat dan sparatortnya adalah TAB. Kurang lebih contoh file txtnya seperti gambar berikut :


Output Program :
 


Tidak ada komentar:

Posting Komentar