SAP -- 怎么从ftp调用文件

1、***连接FTP站点***

  PERFORM SUB_FTP_CONNECT USING    P_WA_ZFTPLOGIN
                          CHANGING L_HANDLE
                                   P_TEXT
                                   P_RETURN.

2、***执行FTP命令***

  PERFORM SUB_FTP_PROCESS TABLES   P_ITAB_COMMAND

                                   P_ITAB_RESULT
                          USING    L_HANDLE
                          CHANGING P_TEXT
                                   P_RETURN.

备注:主要参数为 P_ITAB_COMMAND[]  【 CD RT47/YCKQR3  dir hr_yckq*.txt】    P_ITAB_RESULT【

cd rt47/yckqr3
250 CWD command successful.
dir hr_yckq*.txt
200 PORT command successful.
150 Opening BINARY mode data connection for /bin/ls.
05-25-12  03:41PM                93951 hr_yckq_20110431182023_20180525153211.txt
226 Transfer complete.

3、***中断FTP站点***

  PERFORM SUB_FTP_DISCONNECT CHANGING L_HANDLE.

4、从  P_ITAB_RESULT中取出文件名  包含hr_yckq 但不包含dir的行,可以用    FIND FIRST OCCURRENCE OF C_FILE_PREFIXIN L_WA_FTPFILE-FILENAME RESULTS L_WA_RESULT. 的语句进行实现。                   

此四步取出ftp中存在的文件的名称,当然我们还得判断文件名称是否存在

4 我们需要将文件取出放到服务器的内存中(不知道是不是内存中啊  为 open dataset 做准备),可以理解为执行完成这个之后 ,会在服务器中创建一个同文件名的数据源

4.1   登录FTP   PERFORM SUB_FTP_CONNECT USING    P_WA_ZFTPLOGIN
                          CHANGING P_HANDLE
                                   P_TEXT
                                   P_RETURN.

4.2***执行FTP命令***
    PERFORM SUB_FTP_COMMAND   TABLES  P_ITAB_RESULT
                               USING  P_HANDLE
                                      P_CMD
                            CHANGING  P_RETURN.

注意: 这里的p_CMD 是一个命令  get + 文件名的命令      

 L_CMD <FS_FTPFILE>-FILENAME.
      SHIFT L_CMD BY PLACES RIGHT.
      CONCATENATE 'GET ' L_CMD INTO L_CMD.

4.3 断开ftp 

  PERFORM SUB_FTP_DISCONNECT CHANGING P_HANDLE.

5.以下就和FTP 本身没什么关系了 ,打开数据源 读取数据源的过程啦

  OPEN DATASET P_BK_FILE FOR INPUT IN TEXT MODE ENCODING UTF-8.        "打开文件P_BK_FILE为文件名

 IF SY-SUBRC 0.                                                     "若成功打开,循环读取文件内容
    L_LINE_CNT 0.                                         "初始行数为0
    DO.
      CLEAR G_WA_EXTREC.
      READ DATASET P_BK_FILE INTO L_FILE_LINE.

      L_LINE_CNT L_LINE_CNT + 1.
      IF SY-SUBRC 0.                                                 "成功读取一行数据
        SPLIT L_FILE_LINE AT L_SPLIT_TAB INTO G_WA_EXTREC-PERNR
                                              G_WA_EXTREC-BEGDA
                                              G_WA_EXTREC-ENDDA
                                              G_WA_EXTREC-BEGUZ
                                              G_WA_EXTREC-ENDUZ
                                              G_WA_EXTREC-AWART.
        APPEND G_WA_EXTREC TO G_ITAB_EXTREC.                           "存储文件行数据
        CLEAR:L_FILE_LINE.
      ELSEIF SY-SUBRC 4.                                             "若读到结尾,则结束读取操作
        EXIT.
      ELSE.                                                            "若读取数据失败,结束读取
        P_ERROR_FLAG C_TURE_X.                                        "打上错误标记,并记录日志

        CONCATENATE TEXT-013
                    P_BK_FILE
                    '(第' L_LINE_CNT ')行'
                    INTO L_MSG_STR.                                     "格式为:文件名(第n行)
        PERFORM SUB_WRITE_LOG USING L_MSG_STR C_MSGTYP_E.
      ENDIF.
    ENDDO.

    CLOSE DATASET P_BK_FILE.              关掉文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值