ABAP读取文件

来源:互联网 发布:淘宝卖家怎么看客流量 编辑:程序博客网 时间:2024/06/08 02:53

       ABAP读取文本文件分两种情况:第一种是本地文本文件,第二种是服务器文本文件。它读取方式不一样,本地文件可以直接用 CALL FUNCTION 'WS_UPLOAD'来实现,

然再进行处理,服务器读取文件需要用OPEN DATASET来读取,然后再进行处理。以下是两种读取方式的代码:

 

一、调用的代码:

PARAMETERS:P_FLNAME  LIKE RLGRAP-FILENAME LOWER CASE .

 

本地文本文件:    PERFORM FRM_GET_DATA TABLES IT_ITAB 

                                                                                      USING  P_FLNAME 

                                                                                                    '0'.

服务器文本文件:PERFORM FRM_GET_FILE_FRM_SERVER TABLES IT_ITAB 

                                                                                                                  USING P_FLNAME

                                                                                                                                 '0'.

二、两种读取方式:

(1)读取本地文本文件,参数说明:P_ITAB--读取文件存放内表,P_FILENAME--文件所在目录,P_STARTLINE--读取文件的起始行。

FORM FRM_GET_DATA TABLES P_ITAB USING  P_FILENAME LIKE RLGRAP-FILENAME P_STARTLINE.

  DATA:FRM_IT_DATA TYPE STRING OCCURS 0 WITH HEADER LINE,
       FRM_IT_FIELD TYPE STRING OCCURS 0 WITH HEADER LINE,
       FRM_TABCHAR TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
  FIELD-SYMBOLS <FRM_FIELD> TYPE ANY.

  IF P_FILENAME IS INITIAL.
    RETURN.
  ENDIF.

  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      FILENAME                = P_FILENAME
      FILETYPE                = 'ASC'
    TABLES
      DATA_TAB                = FRM_IT_DATA
    EXCEPTIONS
      CONVERSION_ERROR        = 1
      FILE_OPEN_ERROR         = 2
      FILE_READ_ERROR         = 3
      INVALID_TYPE            = 4
      NO_BATCH                = 5
      UNKNOWN_ERROR           = 6
      INVALID_TABLE_WIDTH     = 7
      GUI_REFUSE_FILETRANSFER = 8
      CUSTOMER_ERROR          = 9
      NO_AUTHORITY            = 10
      OTHERS                  = 11.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    RETURN.
  ENDIF.

  LOOP AT FRM_IT_DATA.
    IF SY-TABIX < P_STARTLINE.
      CONTINUE.
    ENDIF.

    SPLIT FRM_IT_DATA AT FRM_TABCHAR INTO TABLE FRM_IT_FIELD.
    CLEAR P_ITAB.
    LOOP AT FRM_IT_FIELD.
      ASSIGN COMPONENT SY-TABIX OF STRUCTURE P_ITAB TO <FRM_FIELD>.
      <FRM_FIELD> = FRM_IT_FIELD.
    ENDLOOP.

    IF P_ITAB IS NOT INITIAL.
      APPEND P_ITAB.
    ENDIF.

  ENDLOOP.

ENDFORM.       

 

(2)读取服务器文本文件,参数说明:P_ITAB--读取文件存放内表,P_FILENAME--文件所在目录,P_STARTLINE--读取文件的起始行。

FORM FRM_GET_FILE_FRM_SERVER TABLES P_IT_ITAB USING P_FILENAME P_DATALINE.
  DATA:FRM_L_REPCHAR     TYPE EDI_REPCHR,
       FRM_L_OS_MESSAGE(200),
       FRM_DATASET(100)..
  DATA: FRM_WA TYPE STRING.
  DATA: FRM_TAB VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,"获得跳格符.
        FRM_ENT VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF."获得跳格符.
  DATA: FRM_IT_DATA TYPE STRING OCCURS 0 WITH HEADER LINE.
  DATA: FRM_IT_TAB_ROWNUM TYPE I.
  FIELD-SYMBOLS <FRM_FILED>.

  FRM_DATASET = P_FILENAME.
  CONDENSE FRM_DATASET NO-GAPS.

  "打开文件
  OPEN DATASET FRM_DATASET FOR INPUT IN TEXT MODE ENCODING NON-UNICODE
        REPLACEMENT CHARACTER FRM_L_REPCHAR MESSAGE FRM_L_OS_MESSAGE.

  IF SY-SUBRC NE 0.
    RETURN.
  ENDIF.

  REFRESH P_IT_ITAB.

  "循环读取文件,处理转换成格式
  DO.

    "读取数据
    READ DATASET FRM_DATASET INTO FRM_WA.
    IF SY-SUBRC NE 0.
      EXIT.
    ENDIF.

    IF SY-INDEX < P_DATALINE.
      CONTINUE.
    ENDIF.

    "替换回车符为空格
    REPLACE FRM_ENT WITH '' INTO FRM_WA.
    CONDENSE FRM_WA.
    IF FRM_WA IS INITIAL OR FRM_WA = ''.
      CONTINUE.
    ENDIF.

    "拆分字段
    SPLIT FRM_WA AT FRM_TAB INTO TABLE FRM_IT_DATA.

    FRM_IT_TAB_ROWNUM = LINES( FRM_IT_DATA ).

    LOOP AT FRM_IT_DATA.

      ASSIGN COMPONENT SY-TABIX OF STRUCTURE P_IT_ITAB TO <FRM_FILED>.
      <FRM_FILED> = FRM_IT_DATA.

    ENDLOOP.

    APPEND P_IT_ITAB.
  ENDDO.

ENDFORM.     

原创粉丝点击