输入混有中英文的字符串 输出该字符串英文部分首字母大写
输入字符串:I_DATA 输出字符串:I_DATA
DATA: Z_LENG TYPE I, "获取输入字符串长度
L1 TYPE I, "单个字符位数表示
L2 TYPE I, "单个字符位数表示
L3 TYPE I, "单个字符所占位数值
S TYPE C, "单个字符值
ZFLAG TYPE C. "标识
CLEAR :Z_LENG,L1,L2,L3,ZFLAG,S,I_DATAC,P_DATA.
TRANSLATE I_DATA TO LOWER CASE. "将字符串中字母全部转为小写
TRANSLATE I_DATA+0(1) TO UPPER CASE. "第一位置大写
Z_LENG = STRLEN( I_DATA ). "获取字符串长度
L1 = 0.
L2 = 1.
DO Z_LENG TIMES. "按单个字符循环字符串
S = I_DATA+L1(L2).
CALL FUNCTION 'NLS_VISUAL_CHARLEN' "函数获取每个字符串位数
EXPORTING
STR = S
* METRICS =
IMPORTING
* LEN_MEMORY =
LEN_VISUAL = L3 "L3 值为1 说明该字符是英文或数字 值为2 该字符说明为汉字
.
IF L3 = 1 AND ZFLAG IS INITIAL . "若为英文 且标识为空时 将该字符大写 并更新字符串
TRANSLATE S TO UPPER CASE.
I_DATA+L1(L2) = S.
ZFLAG = 'X'. "标识设为'X
ELSEIF L3 <> 1. "若为非英文 清空标识
CLEAR ZFLAG.
ENDIF.
L1 = L1 + 1. "取下一位
ENDDO.
. "更新后的字符串I_DATA即为输出 可自行封装成函数