pb9获得当前程序所在路径及中文字符长度处理

来源:互联网 发布:淘宝清洗过期了怎么办 编辑:程序博客网 时间:2024/06/05 17:25


pb9获得当前程序所在路径及中文字符长度处理

(2013-04-09 12:00:42)
转载
标签:

pb9

powerbuilder

程序路径

中文字符长度

 
String ls_Path, ls_Buffer = Space(255)
If Handle(GetApplication(), False) = 0 Then
    //开发模式运行
    ls_Path = GetCurrentDirectory()
Else
    //编译后运行
    If GetModuleFileName(Handle(GetApplication()),ls_Buffer,255) = 0 Then
        SetNull(ls_Buffer)
        ls_Path = ''
    Else
 ls_buffer = Trim( ls_Buffer )
        ls_Buffer = f_myLeft(ls_Buffer,LastPos(ls_Buffer,"\"))
        ls_Path = Trim( ls_Buffer )
    End If
End If
If ls_path <> '' And Right(ls_path, 1) <> '\' Then 
ls_path += '\'
end if
Return ls_Path

这里面有两个需要注意地方,ls_Buffer = Space(255) ,另外f_myLeft是一个自定义函数,不直接用left的原因是pb9对Unicode的不支持,会把一个中文的长度当成1而不是2。下面是f_myLeft函数内容:
char l_ch
int li_len
string ls_str
string ls_rtn
li_len = f_mylen(a_str)
if a_len>=li_len then return a_str
ls_str =a_str
li_len =1

do while li_len <= a_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 
        a_len+=1
    else
        ls_rtn = ls_rtn + mid(ls_str,li_len,1)    
        li_len +=1
    end if    
loop
return ls_rtn
这个是f_mylen函数内容:
char l_ch
int li_len,li_p
string ls_str

ls_str =a_str
li_p =1

do while len(ls_str)>=li_p
    l_ch = mid(ls_str,li_p,1)    
    if asc(l_ch) >127 then        
        li_p +=2         
    else        
        li_p +=1
    end if    
    li_len+=1
loop
return li_len
0 0
原创粉丝点击