一个从服务器目录下读取文件list的用例
*&---------------------------------------------------------------------*
*& Report ZREAD_FILE_FROM_SERVER
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZREAD_FILE_FROM_SERVER.
DATA: TBL_FILE_LIST LIKE TABLE OF EPSFILI INITIAL SIZE 0 WITH HEADER LINE.
DATA: TXT TYPE TABLE OF STRING WITH HEADER LINE.
DATA: ISY_SUBRC TYPE I.
DATA: TXTCONTENT TYPE STRING.
DATA:G_FILE_NAME_FULL LIKE RLGRAP-FILENAME.
DATA:G_WORD(7) TYPE C,
G_FLAG(6) TYPE C.
DATA: BEGIN OF ITAB OCCURS 0,
WORD(800) TYPE C,
END OF ITAB.
DATA P_DIRNAM LIKE EPSF-EPSDIRNAM .
P_DIRNAM = 'D:\USR\SAP\TRANS'.
START-OF-SELECTION.
*获取目录下文件
PERFORM GET_FILE_LIST.
PERFORM READ_FILE_INTO_ITAB.
*&---------------------------------------------------------------------*
*& Form GET_FILE_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_FILE_LIST .
REFRESH TBL_FILE_LIST.
CLEAR TBL_FILE_LIST.
CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
DIR_NAME = P_DIRNAM
* FILE_MASK = ' '
* IMPORTING
* DIR_NAME =
* FILE_COUNTER =
* ERROR_COUNTER =
TABLES
DIR_LIST = TBL_FILE_LIST
EXCEPTIONS
INVALID_EPS_SUBDIR = 1
SAPGPARAM_FAILED = 2
BUILD_DIRECTORY_FAILED = 3
NO_AUTHORIZATION = 4
READ_DIRECTORY_FAILED = 5
TOO_MANY_READ_ERRORS = 6
EMPTY_DIRECTORY_LIST = 7
OTHERS = 8
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF TBL_FILE_LIST[] IS INITIAL.
WRITE:'No file is found!'.
ELSE.
LOOP AT TBL_FILE_LIST.
TRANSLATE TBL_FILE_LIST-NAME TO UPPER CASE.
MODIFY TBL_FILE_LIST.
ENDLOOP.
ENDIF.
ENDFORM. " GET_FILE_LIST
*&---------------------------------------------------------------------*
*& Form READ_FILE_INTO_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM READ_FILE_INTO_ITAB .
LOOP AT TBL_FILE_LIST.
IF TBL_FILE_LIST-NAME = 'SIGNATURE.SMF'.
CLEAR: TXT,TXT[],ITAB,ITAB[].
PERFORM GET_FULL_NAME USING P_DIRNAM
TBL_FILE_LIST-NAME
CHANGING G_FILE_NAME_FULL.
PERFORM OPENDATA_IN TABLES TXT USING G_FILE_NAME_FULL.
IF TXT[] IS NOT INITIAL.
PERFORM SPLIT_TXT TABLES TXT.
ELSE.
...
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " READ_FILE_INTO_ITAB
*&---------------------------------------------------------------------*
*& Form GET_FULL_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_DIRNAM text
* -->P_NAME text
* <--P_FULLNAME text
*----------------------------------------------------------------------*
FORM GET_FULL_NAME USING P_DIRNAM
P_NAME
CHANGING P_FULLNAME.
DATA: L_LENGTH TYPE I,
L_DIRNAME LIKE RLGRAP-FILENAME,
L_NAME LIKE RLGRAP-FILENAME.
L_DIRNAME = P_DIRNAM.
L_NAME = P_NAME.
CONDENSE: L_DIRNAME,
L_NAME.
L_LENGTH = STRLEN( L_DIRNAME ).
L_LENGTH = L_LENGTH - 1.
IF L_DIRNAME+L_LENGTH(1) = '\'.
CONCATENATE L_DIRNAME
L_NAME
INTO P_FULLNAME.
ELSE.
CONCATENATE L_DIRNAME
'\'
L_NAME
INTO P_FULLNAME.
ENDIF.
ENDFORM. " GET_FULL_NAME
*&---------------------------------------------------------------------*
*& Form OPENDATA_IN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->TXT text
* -->WA_FILEPATH text
*----------------------------------------------------------------------*
FORM OPENDATA_IN TABLES TXT
USING WA_FILEPATH.
DATA: W_FILE TYPE STRING.
W_FILE = WA_FILEPATH.
OPEN DATASET W_FILE FOR INPUT
IN TEXT MODE
ENCODING UTF-8.
CHECK SY-SUBRC = 0.
DO.
READ DATASET W_FILE INTO TXT.
IF SY-SUBRC <> 0.
EXIT.
ELSE.
APPEND TXT.
CLEAR: TXT.
ENDIF.
ENDDO.
CLOSE DATASET W_FILE.
ENDFORM. " OPENDATA_IN
*&---------------------------------------------------------------------*
*& Form SPLIT_TXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TXT text
*----------------------------------------------------------------------*
FORM SPLIT_TXT TABLES P_TXT.
*在要读取的file内容的payment之前加'|',然后在通过按照'|'分割,将file的内容将转入内表
* REPLACE ALL OCCURRENCES OF '|PAYMENT' IN TABLE P_TXT WITH 'PAYMENT' RESPECTING CASE.
REPLACE ALL OCCURRENCES OF '|\' IN TABLE P_TXT WITH '\' RESPECTING CASE.
LOOP AT P_TXT.
SPLIT P_TXT AT '|' INTO TABLE ITAB.
LOOP AT ITAB.
WRITE: ITAB-WORD.
ENDLOOP.
ENDLOOP.
ENDFORM. " SPLIT_TXT