TalentLean

博客园 首页 联系 订阅 管理

*&---------------------------------------------------------------------*
*&      Form  CONVERT_TO_X
*&---------------------------------------------------------------------*
*  转换数据格式进入16进制,防止传输过程中碰到中文字符是出现乱码的问题
*----------------------------------------------------------------------*
FORM CONVERT_TO_X TABLES    IT_EXPORT LIKE T_EXPORT[] "输出表
                    USING    L_INPUT TYPE STRING"待转化的字符串
                             CHGLINE TYPE C"是否需要换行
                             conv TYPE REF TO cl_abap_conv_out_ce "字符处理类
                  CHANGING    X_STRING TYPE XSTRING
                             L_TTLEN TYPE I.   "总长度
   DATA:L_XSTRLEN TYPE I,"转换后的长度长度
        BUFFER TYPE XSTRING.
   CONSTANTS:L_LINELEN TYPE I VALUE 80."每行的长度.
   TRY.
     CALL METHOD CONV->WRITE( DATA = L_INPUT ).
  CATCH cx_sy_codepage_converter_init.
*        MESSAGE ID 'FES' TYPE 'E' NUMBER '024'.
     CATCH cx_sy_conversion_codepage.
*        MESSAGE ID 'FES' TYPE 'E' NUMBER '026'.
*        text = oref->get_text( ).
*        WRITE: / INPUT COLOR COL_KEY, TEXT COLOR COL_NEGATIVE.
     CATCH cx_parameter_invalid_type.
*        MESSAGE ID 'FES' TYPE 'E' NUMBER '023'.
     CATCH cx_parameter_invalid_range.
*        MESSAGE ID 'FES' TYPE 'E' NUMBER '023'.
    ENDTRY.
  IF CHGLINE = 'X'.
    CALL METHOD CONV->WRITE( DATA = cl_abap_char_utilities=>cr_lf )."输入换行符
  ENDIF.
    BUFFER = CONV->GET_BUFFER( ).
    CONCATENATE X_STRING BUFFER INTO X_STRING IN BYTE MODE.
    DO.
      L_XSTRLEN = XSTRLEN( X_STRING ).
      IF L_XSTRLEN >= L_LINELEN.
        L_TTLEN = L_TTLEN + L_LINELEN.
        APPEND X_STRING TO IT_EXPORT.
        SHIFT X_STRING BY L_LINELEN PLACES IN BYTE MODE.
      ELSE.
        EXIT.
      ENDIF.
    ENDDO.
ENDFORM.                    " CONVERT_TO_X

posted on 2011-07-21 15:16  TalentLean  阅读(131)  评论(0)    收藏  举报