Jerry自己写的ABAP处理中文字符的工具类
- 2020 年 1 月 21 日
- 筆記
class ZCL_CHINESE_TOOL definition public final create public . public section. type-pools ABAP . types: tt_post_attributes TYPE STANDARD TABLE OF crmt_soc_post_attr . types: tt_post_uuid TYPE STANDARD TABLE OF crmt_soc_data_uuid . types: tt_socialuserinfo type standard table of socialuserinfo . class-methods CLASS_CONSTRUCTOR . class-methods GET_FORMATTED_STRING importing !IV_FLAG type CRMT_SOC_UNICODE_FLAG optional !IV_STRING type STRING returning value(RV_STRING) type STRING . protected section. private section. types: tt_sentit TYPE STANDARD TABLE OF crmc_soc_senti_t . class-data SV_UNICODE_FLAG type CRMT_SOC_UNICODE_FLAG . class-data ST_INVALID type STRING_TABLE . class-data ST_CONTROL_FLAGS type STRING_TABLE . class-methods IS_HEXDECIMAL importing !IV_STRING type CHAR4 returning value(IS_HEXDECIMAL) type ABAP_BOOL . class-methods IS_VALID_UNICODE_FLAG importing !IV_FLAG type CRMT_SOC_UNICODE_FLAG returning value(RV_VALID) type ABAP_BOOL . ENDCLASS. CLASS ZCL_CHINESE_TOOL IMPLEMENTATION. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_CHINESE_TOOL=>CLASS_CONSTRUCTOR * +-------------------------------------------------------------------------------------------------+ * +--------------------------------------------------------------------------------------</SIGNATURE> method CLASS_CONSTRUCTOR. APPEND cl_abap_conv_in_ce=>uccp( 'p2d3' ) to st_invalid. "#EC NOTEXT APPEND cl_abap_conv_in_ce=>uccp( '1234' ) to st_invalid. "#EC NOTEXT DATA: it_taba TYPE STANDARD TABLE OF dd07v, it_tabb TYPE STANDARD TABLE OF dd07v. FIELD-SYMBOLS: <item> TYPE dd07v. CALL FUNCTION 'DD_DOMA_GET' EXPORTING domain_name = 'CRM_SOC_UNICODE_FLAG' langu = sy-langu withtext = 'X' TABLES dd07v_tab_a = it_taba dd07v_tab_n = it_tabb EXCEPTIONS illegal_value = 1 op_failure = 2 OTHERS = 3. LOOP AT it_taba ASSIGNING <item>. APPEND <item>-domvalue_l TO st_control_flags. ENDLOOP. endmethod. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_CHINESE_TOOL=>GET_FORMATTED_STRING * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_FLAG TYPE CRMT_SOC_UNICODE_FLAG(optional) * | [--->] IV_STRING TYPE STRING * | [<-()] RV_STRING TYPE STRING * +--------------------------------------------------------------------------------------</SIGNATURE> method GET_FORMATTED_STRING. CONSTANTS: c_default TYPE CRMT_SOC_UNICODE_FLAG VALUE 'u'. TYPES: BEGIN OF ty_pair, unicode TYPE char4, chinese TYPE char2, END OF ty_pair. DATA: lv_offset TYPE i, lv_start TYPE i, lt_match TYPE match_result_tab, ls_match LIKE LINE OF lt_match, lv_unicode TYPE char4, lv_upper TYPE char4, lt_chinese TYPE STANDARD TABLE OF ty_pair, ls_pair TYPE ty_pair, lv_len TYPE i, lv_chinese TYPE crmt_soc_unicode_flag, lv_replace TYPE char7, lv_input TYPE string. IF iv_flag IS NOT SUPPLIED. sv_unicode_flag = c_default. ELSEIF is_valid_unicode_flag( iv_flag ) = abap_false. rv_string = iv_string. RETURN. ELSE. sv_unicode_flag = iv_flag. ENDIF. FIND ALL OCCURRENCES OF sv_unicode_flag IN iv_string RESULTS lt_match. IF sy-subrc <> 0. rv_string = iv_string. RETURN. ENDIF. lv_input = iv_string. lv_len = strlen( lv_input ). CLEAR: lt_chinese. LOOP AT lt_match INTO ls_match. lv_start = ls_match-offset + ls_match-length. CHECK lv_len >= lv_start + 4. lv_upper = lv_unicode = iv_string+lv_start(4). TRANSLATE lv_upper TO UPPER CASE. CHECK is_hexdecimal( lv_unicode ) = abap_true. lv_chinese = cl_abap_conv_in_ce=>uccp( lv_upper ). READ TABLE st_invalid WITH KEY table_line = lv_chinese TRANSPORTING NO FIELDS. CHECK sy-subrc <> 0. ls_pair-unicode = lv_unicode. ls_pair-chinese = lv_chinese. APPEND ls_pair TO lt_chinese. ENDLOOP. LOOP AT lt_chinese INTO ls_pair. lv_replace = sv_unicode_flag && ls_pair-unicode. REPLACE ALL OCCURRENCES OF lv_replace IN lv_input WITH ls_pair-chinese. ENDLOOP. rv_string = lv_input. endmethod. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Static Private Method ZCL_CHINESE_TOOL=>IS_HEXDECIMAL * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_STRING TYPE CHAR4 * | [<-()] IS_HEXDECIMAL TYPE ABAP_BOOL * +--------------------------------------------------------------------------------------</SIGNATURE> method IS_HEXDECIMAL. CONSTANTS: mask TYPE string VALUE '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'. IF iv_string CO mask. is_hexdecimal = abap_true. ENDIF. endmethod. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Static Private Method ZCL_CHINESE_TOOL=>IS_VALID_UNICODE_FLAG * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_FLAG TYPE CRMT_SOC_UNICODE_FLAG * | [<-()] RV_VALID TYPE ABAP_BOOL * +--------------------------------------------------------------------------------------</SIGNATURE> method IS_VALID_UNICODE_FLAG. READ TABLE st_control_flags WITH KEY table_line = iv_flag TRANSPORTING NO FIELDS. IF sy-subrc = 0. rv_valid = abap_true. ENDIF. endmethod. ENDCLASS.
要获取更多Jerry的原创文章,请关注公众号"汪子熙":