PowerBuilder9对中文字符串的处理方法
环境:PowerBuilder9.03
由于PB9没有对Unicode的支持函数,处理汉字的字符串只能自己写函数处理。
以下给len()定义函数of_len()处理带汉字字符串。代码如下:
//////////////////////////////////////////////////////////////////////////////
//
// 函数: of_len
//
// 属性: public
//
// 参数: string as_str
//
// 返回: integer
//
// 功能:
// 返回字符串长度
//
//////////////////////////////////////////////////////////////////////////////
//声明
int li_len
int li_p
char lc_char
string ls_str
//赋值
ls_str= as_str
li_p = 1
//处理
do while len(ls_str)>= li_p
lc_char= mid(ls_str,li_p,1)
if asc(lc_char) >127 then
li_p += 2
li_len+= 2
else
li_p += 1
li_len+= 1
end if
loop
return li_len
对left()函数定义of_left()代替,代码如下:
//////////////////////////////////////////////////////////////////////////////
//
// 函数: of_left
//
// 属性: public
//
// 参数: string as_str
// integer ai_len
//
// 返回: string
//
// 功能:
// 得到字符串左部指定个数的字符
//
//////////////////////////////////////////////////////////////////////////////
//声明
char l_ch
int li_len
string ls_str
string ls_rtn
//赋值
li_len = of_len(as_str)
if ai_len>= li_len then return as_str
ls_str= as_str
li_len= 1
//处理
do while li_len <= ai_len and len(ls_str)>=li_len
l_ch = mid(ls_str,li_len,1)
if asc(l_ch) >127 then
ls_rtn = ls_rtn + mid(ls_str,li_len,2)
li_len+= 2
ai_len+= 1
else
ls_rtn = ls_rtn + mid(ls_str,li_len,1)
li_len +=1
end if
loop
return ls_rtn