通过ERP系统 产生压缩文件,并保存到系统服务器。

创建系统文件夹   AL11

点击Configure,进入到创建路径界面

完成点击保存,此时的创建并不代表已经创建完成

 

SM69

通过外部指令添加文件夹到真正的系统服务器上。

点击创建按钮

接下来点击保存按钮,并执行到最后

此时我们回到AL11打开路径,可成功打开

 

创建压缩文件

 

 

第一次执行程序的内容

 

改变子文件名称和内容再来执行一次,得到如下文件。

 

 

代码:

TYPES:
  BEGIN OF XML_LINE,
    DATA(512) TYPE X,
  END OF XML_LINE.

DATA:
  LV_LENGTH      TYPE I,
  LV_ZIP_XSTRING TYPE XSTRING,
  LV_NAME        TYPE STRING,
  LV_XTR         TYPE XSTRING,
  GV_XML         TYPE STRING,
  LV_STRING      TYPE XSTRING,
  LV_DSN         TYPE STRING.

DATA:
  LS_BINARY TYPE XML_LINE,
  LT_BINARY TYPE STANDARD TABLE OF XML_LINE,
  LT_LIST TYPE STANDARD TABLE OF EPSFILI.

DATA:
    LO_ZIP TYPE REF TO CL_ABAP_ZIP.

CREATE OBJECT LO_ZIP.

LV_DSN = 'e:\10490_test\10490_02.zip'.

*打开系统文件夹路径
OPEN DATASET LV_DSN FOR INPUT IN BINARY MODE.
 

IF SY-SUBRC = 0.
*读取二进制数据
  READ DATASET LV_DSN INTO LV_STRING.

ENDIF.

*关闭系统文件路径
CLOSE DATASET LV_DSN.

* 加载已有数据
LO_ZIP->LOAD( LV_STRING ).

GV_XML = '123456789QWERT'.

* SRING类型转换为16进制
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
  EXPORTING
    TEXT           = GV_XML
*   MIMETYPE       = ' '
*   ENCODING       =
 IMPORTING
   BUFFER         = LV_XTR
 EXCEPTIONS
   FAILED         = 1
   OTHERS         = 2
          .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

*填充子文件名称
LV_NAME = '123.XML'.

*添加子文件进入压缩文件
LO_ZIP->ADD( NAME = LV_NAME CONTENT = LV_XTR ).

*获取压缩文件中的全部数据(16进制)
LV_ZIP_XSTRING = LO_ZIP->SAVE( ).

*16进制转换为2进制
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    BUFFER                = LV_ZIP_XSTRING
*   APPEND_TO_TABLE       = ' '
 IMPORTING
   OUTPUT_LENGTH         = LV_LENGTH
  TABLES
    BINARY_TAB            = LT_BINARY.

*打开原始文件路径,进行数据修改操作

OPEN DATASET LV_DSN FOR OUTPUT IN BINARY MODE.

LOOP AT LT_BINARY INTO LS_BINARY.
  TRANSFER LS_BINARY-DATA TO LV_DSN.
ENDLOOP.

CLOSE DATASET LV_DSN.

解压缩文件

TYPES:
  BEGIN OF T_FILE,
    NAME TYPE STRING,
    DATE TYPE D,
    TIME TYPE T,
    SIZE TYPE I,
  END OF T_FILE.

DATA:
  TXT_DATA       TYPE STRING,
  LV_ENCODE      TYPE ABAP_ENCOD VALUE 'NON-UNICODE',
  LV_ZIP_CONTENT TYPE XSTRING,
  LV_COUNT       TYPE INT4,
  LV_STRING      TYPE XSTRING,
  LV_NAME        TYPE STRING.

DATA:
  CONV_X2C TYPE REF TO CL_ABAP_CONV_IN_CE,
  LO_ZIP   TYPE REF TO CL_ABAP_ZIP.



DATA:
  TXT_NEWLINE TYPE STANDARD TABLE OF STRING,
  LT_TAB TYPE STANDARD TABLE OF T_FILE.

FIELD-SYMBOLS:
   <T> TYPE T_FILE.

LV_NAME = 'e:\10490_test\10490_03.zip'.

*读取路径下文件
OPEN DATASET LV_NAME FOR INPUT IN BINARY MODE .

*读取内容至二进制
READ DATASET LV_NAME INTO LV_STRING.

*关闭文件路径
CLOSE DATASET LV_NAME.

CREATE OBJECT LO_ZIP.

*加载数据
LO_ZIP->LOAD( LV_STRING ).

*获取子文件名称
LT_TAB = LO_ZIP->FILES.

CLEAR LV_COUNT.

LOOP AT LT_TAB ASSIGNING <T>.

  LV_COUNT = LV_COUNT + 1.

*获取每一个xml下的16进制内容进行拼接
  CALL METHOD LO_ZIP->GET
    EXPORTING
      INDEX   = LV_COUNT
    IMPORTING
      CONTENT = LV_ZIP_CONTENT.

  CONV_X2C = CL_ABAP_CONV_IN_CE=>CREATE( ENCODING = LV_ENCODE ).

* 16进制转换为文本
  CONV_X2C->CONVERT(  EXPORTING INPUT = LV_ZIP_CONTENT
                      IMPORTING DATA  = TXT_DATA ).
*
ENDLOOP.

猜你喜欢

转载自blog.csdn.net/z_x_xing_/article/details/90201202