abap 中文字符串提取和字节长度计算 (两种方法)
2013-09-26 16:31
1691 查看
abap 中对于字符串长度的计算一般用 strlen 函数实现。但此函数只能算出字符的个数无法计算字符串的长度,例如 'ABC你好'用此函数计算得到的值为5,显然它不是我们想要的,它的字节长度为7 。
经过研究,我写了一个函数可以实现功能代码如下:
FUNCTION YGET_CNCHAR_CHARLE.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(STRING) TYPE STRING 传入字符串
*" EXPORTING
*" REFERENCE(STR) TYPE STRING 返回字符串
*" REFERENCE(CHARLEN) TYPE I 返回长度
*"----------------------------------------------------------------------
DATA: w_uccp TYPE i,
w_temp(2) TYPE c,
w_left(100) TYPE c,
w_len(10) TYPE c,
s_len TYPE i
.
w_left = string.
DATA : BEGIN OF line,
text TYPE c,
END OF line,
itab LIKE TABLE OF line WITH HEADER LINE.
*DATA str TYPE string.
DO.
CALL FUNCTION 'TEXT_SPLIT'
EXPORTING
length = 2
text = w_left
IMPORTING
line = w_temp
rest = w_left.
CALL METHOD cl_abap_conv_out_ce=>uccpi
EXPORTING
char = w_temp
RECEIVING
uccp = w_uccp.
w_len = STRLEN( w_temp ).
* WRITE: /1 w_temp,
* 10 w_uccp,
* 25 w_len.
IF w_uccp > 256.
CONCATENATE str w_temp INTO str.
ENDIF.
IF w_left IS INITIAL OR sy-index > 100.
EXIT.
ENDIF.
ENDDO.
IF str IS NOT INITIAL.
DATA:t_len TYPE i.
clear : s_len,charlen.
t_len = STRLEN( string ).
s_len = STRLEN( str ).
t_len = t_len - s_len .
s_len = s_len * 2 .
charlen = t_len + s_len.
* WRITE :/,'CHARLEN=' ,charlen, 'STR= ',str.
ENDIF.
ENDFUNCTION.
"""""""""方法2
DATA: lv_str TYPE string,
lv_len TYPE i.
lv_str = 'AB中国'.
lv_len = cl_abap_list_utilities=>dynamic_output_length( lv_str ).
WRITE lv_len.
经过研究,我写了一个函数可以实现功能代码如下:
FUNCTION YGET_CNCHAR_CHARLE.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(STRING) TYPE STRING 传入字符串
*" EXPORTING
*" REFERENCE(STR) TYPE STRING 返回字符串
*" REFERENCE(CHARLEN) TYPE I 返回长度
*"----------------------------------------------------------------------
DATA: w_uccp TYPE i,
w_temp(2) TYPE c,
w_left(100) TYPE c,
w_len(10) TYPE c,
s_len TYPE i
.
w_left = string.
DATA : BEGIN OF line,
text TYPE c,
END OF line,
itab LIKE TABLE OF line WITH HEADER LINE.
*DATA str TYPE string.
DO.
CALL FUNCTION 'TEXT_SPLIT'
EXPORTING
length = 2
text = w_left
IMPORTING
line = w_temp
rest = w_left.
CALL METHOD cl_abap_conv_out_ce=>uccpi
EXPORTING
char = w_temp
RECEIVING
uccp = w_uccp.
w_len = STRLEN( w_temp ).
* WRITE: /1 w_temp,
* 10 w_uccp,
* 25 w_len.
IF w_uccp > 256.
CONCATENATE str w_temp INTO str.
ENDIF.
IF w_left IS INITIAL OR sy-index > 100.
EXIT.
ENDIF.
ENDDO.
IF str IS NOT INITIAL.
DATA:t_len TYPE i.
clear : s_len,charlen.
t_len = STRLEN( string ).
s_len = STRLEN( str ).
t_len = t_len - s_len .
s_len = s_len * 2 .
charlen = t_len + s_len.
* WRITE :/,'CHARLEN=' ,charlen, 'STR= ',str.
ENDIF.
ENDFUNCTION.
"""""""""方法2
DATA: lv_str TYPE string,
lv_len TYPE i.
lv_str = 'AB中国'.
lv_len = cl_abap_list_utilities=>dynamic_output_length( lv_str ).
WRITE lv_len.
相关文章推荐
- abap 中文字符串提取和字节长度计算
- PHP 字符串长度计算函数strlen() 正确的计算 中文汉字长度的方法 与mb_strlen()应用
- 在Java中按字节获得字符串长度的两种方法
- 在Java中按字节获得字符串长度的两种方法
- ABAP取中文字符串的字节长度
- 在 Java中按字节获得字符串长度的两种方法
- 在 Java中按字节获得字符串长度的两种方法
- 在Java中按字节获得字符串长度的两种方法
- ABAP 提取或去除字符串中的中文字符(双字节字符)
- PHP 判断字符串长度 判断纯中文 的两种方法比较
- ABAP 提取或去除字符串中的中文字符(双字节字符)
- 在Java中按字节获得字符串长度的两种方法
- 在Java中按字节获得字符串长度的两种方法
- 用两种不同的方法 计算出字符串的长度 11月15日
- 在Java中按字节获得字符串长度的两种方法
- java中按字节获得字符串长度的两种方法 Java问题通用解决代码
- ABAP 提取或去除字符串中的中文字符(双字节字符)
- ABAP 提取或去除字符串中的中文字符(双字节字符)
- 利用正则表达式计算含有中文的字符串长度
- 字符串操作1 - 递归与非递归两种方法求字符串长度