二维码

[基础语法] SAP Unicode编码下获取字符串长度

Twilight发表于 2016-02-05 15:38Twilight 最后回复于 2016-02-05 15:38 [复制链接] 4025 0

SAP提供了一个Class(CL_ABAP_LIST_UTILITIES)来解决这些问题。
  1. DATA: length TYPE i,
  2.       str TYPE string.
  3. str = '测试'.
  4. length = cl_abap_list_utilities=>dynamic_output_length( str ).
  5. write: 'cl_abap_list_utilities:', length.
  6. length = strlen( str ).
  7. write: / 'strlen:', length.
复制代码

测试结果:
Unique.jpg

应用场景:每行显示25个字符,计算字符串占用行数
  1. PERFORM frm_string_length USING <fs_item>-dummy40 25 CHANGING lv_line_cell.
复制代码
  1. *&---------------------------------------------------------------------*
  2. *& Form FRM_STRING_LENGTH
  3. *&---------------------------------------------------------------------*
  4. *& text
  5. *&---------------------------------------------------------------------*
  6. *&      --> <FS_ITEM>_SG_TEXT
  7. *&      --> P_40
  8. *&      <-- LV_LINES
  9. *&---------------------------------------------------------------------*
  10. FORM frm_string_length  USING    pi_str
  11.                                  pi_item_num TYPE i
  12.                         CHANGING pc_lines TYPE i.
  13.   DATA:lv_len   TYPE i.
  14.   DATA:lv_line1 TYPE i.
  15.   DATA:lv_floor TYPE p DECIMALS 2.

  16.   CLEAR:pc_lines.
  17.   CHECK pi_item_num IS NOT INITIAL.
  18.   CALL METHOD cl_abap_list_utilities=>dynamic_output_length
  19.     EXPORTING
  20.       field = pi_str
  21.     RECEIVING
  22.       len   = lv_len.

  23.   lv_floor = floor( lv_len / pi_item_num ).
  24.   pc_lines = lv_floor.
  25.   lv_line1 = lv_len MOD pi_item_num.
  26.   IF lv_line1 NE 0.
  27.     pc_lines = pc_lines + 1.
  28.   ENDIF.

  29. ENDFORM.
复制代码
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表