giovedì 10 novembre 2016

Leggere un file CSV sull'Application Server

*----------------------------------------------------------------------*
* DECLARATIONS                                                         *
*----------------------------------------------------------------------*
TABLES: p9058.

*Strutture
DATA: BEGIN OF gs_dati,
        pernr LIKE p9058-pernr,
        subty LIKE p9058-subty,
        endda LIKE p9058-endda,
        begda LIKE p9058-begda,
        preas LIKE p9058-preas,
        importo(20),
        waers LIKE p9058-waers,
        trfar LIKE p9058-trfar,
        trfgb LIKE p9058-trfgb,
        trfgr LIKE p9058-trfgr,
        trfst LIKE p9058-trfst,
      END OF gs_dati.

*Tabelle
DATA: BEGIN OF gt_bin OCCURS 0,
        dati TYPE string,
      END OF gt_bin.
DATA gt_split TYPE TABLE OF string WITH HEADER LINE.
DATA gt_dati LIKE STANDARD TABLE OF gs_dati WITH HEADER LINE.

*Variabili
DATA gv_type.

*Field-symbols
FIELD-SYMBOLS <gf_campo> TYPE ANY.

*----------------------------------------------------------------------*
* LAYOUT                                                               *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_fsrv TYPE string LOWER CASE.
SELECTION-SCREEN END OF BLOCK b1.

*----------------------------------------------------------------------*
* PROGRAM BODY                                                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  OPEN DATASET p_fsrv FOR INPUT IN TEXT MODE ENCODING DEFAULT.
  IF sy-subrc IS INITIAL.
    DO.
      CLEAR gt_bin.
      READ DATASET p_fsrv INTO gt_bin-dati.
      IF sy-subrc IS INITIAL.
        APPEND gt_bin.
      ELSE.
        EXIT.
      ENDIF.
    ENDDO.
    CLOSE DATASET p_fsrv.
  ELSE.
    MESSAGE e001. "Errore di apertura file
  ENDIF.

  LOOP AT gt_bin.
    CLEAR: gs_dati, gt_split[].
    SPLIT gt_bin-dati AT ';' INTO TABLE gt_split.
    LOOP AT gt_split.
      ASSIGN COMPONENT sy-tabix OF STRUCTURE gs_dati TO <gf_campo>.
      IF sy-subrc IS INITIAL.
        DESCRIBE FIELD <gf_campo> TYPE gv_type.
        IF gv_type = 'P'.
          TRANSLATE gt_split USING ',.'.
        ENDIF.
        <gf_campo> = gt_split.
      ENDIF.
    ENDLOOP.
    APPEND gs_dati TO gt_dati.
  ENDLOOP.

*----------------------------------------------------------------------*

Nessun commento: