以前遇到过类似的问题,但一直没有仔细剖析,昨天刚巧有朋友问到,就好好做了一下,先从网上找了相关函数,如下:
'===============================================================
'Strsub
'函数功能:获取字符串长度(汉字长度为2).
'参数意义:str ---- 字符串
'===============================================================
Function strlen(str)
Dim p_len,xx
p_len=0
strlen=0
If Trim(str)<>"" Then
p_len=len(trim(str))
For xx=1 To p_len
If asc(mid(str,xx,1))<0 Then
strlen=int(strlen) + 2
Else
strlen=int(strlen) + 1
End If
Next
End If
End Function
'===============================================================
'Strsub
'函数功能:字符串截取.
'参数意义:str ---- 要截取的字符串. lennum---截取的字符数. s---结尾字符
'===============================================================
Function Strsub(str,lennum,s)
If Not IsNull(str) Then
Dim p_num,x
Dim i
If strlen(str)<=lennum Then
Strsub=str
Else
p_num=0
x=0
Do While Not p_num > lennum-2
x=x+1
If Asc(Mid(str,x,1))<0 Then
p_num=Int(p_num) + 2
Else
p_num=Int(p_num) + 1
End If
Strsub=Left(Trim(str),x)&s
Loop
End If
Else
Strsub="Null"
End If
End Function
测试过程中发现如下问题:
1有截取的时候函数调用使用方法不清晰 ,指定长度同时指定后面显示的省略符号,使得长度控制不准确.
2在部分中英混排情况下截取不准,不能得到可显示部分的最后一个英文字符.
昨天研究过这些后有事情先闪,回家有心情看孩子的时候居然手写了两个函数,这张纸应该照下来,不过今天没带220,下午拍完补上,好久没有这么认真的想事情了.写的函数如下:
'===============================================================
'自定义函数名:mylen
'函数功能:获取字符串长度(汉字长度为2).
'参数意义:str ---- 字符串
'===============================================================
function mylen(str)
mylen=0
for x=1 to len(str)
mylen=mylen+1
if asc(mid(str,x,1))<0 then mylen=mylen+1
next
end function
'===============================================================
'自定义函数名:myleftstr
'函数功能:字符串截取.(处理汉字与英文数字混排)
'参数意义:str ---- 要截取的字符串. mylenth---截取的字符数.
'提示:这里自动将超长的后三个字符处理为...
'===============================================================
function myleftstr(str,mylength)
myleftstr=str
if mylen(str)>mylength then
mylength=mylength-3
for x=int(mylength/2) to mylength+1
if mylen(left(str,x))>mylength then getlength=x-1:exit for
next
myleftstr=left(str,getlength)&"..."
end if
end function
做了几组数据测试进行比较,
设置为可显示10个字符的限制,对于函数使用Strsub(str,7,"...")方式调用,也许是没有细看函数的原因,可能还会有更细致的设置方法达到更好的效果.
测试结果:
测试结果总结:
对于全中文的字符串,如果超长可显示部分是奇数个的话,后面的半个无法显示这是肯定的,显示了也是不正常,经过处理,允许显示范围内的最后一个英文字符可以显示,还算正常。