取得字符串中双字节(中文和中文符号).英文字母.空格.数字字符和其他字符个数,并显示它们

一个字符串,要求分别统计其中 中文、英文字母,空格,数字字符、和 其他字符个数, 并显示它们。

---------------------------------------------------------------
方法一:

ABC1="adfd1成B2{1,d功.fds f*5/7!&7中"
StrIdentify(ABC1)

FUNCTION StrIdentify
LPARAMETERS lcString
LOCAL lc中文,ln中文个数,lc英文,ln英文个数,lc空格,ln空格个数,lc数字,ln数字个数,lc其他字符,ln其他字符个数
STORE '' TO lc中文,lc英文,lc空格,lc数字,lc其他字符
STORE 0 TO ln中文个数,ln英文个数,ln空格个数,ln数字个数,ln其他字符个数
FOR I=1 TO LEN(lcString)
IF ISLEADBYTE(SUBSTR(lcString,I,1)) &&中文(中文及中文符号是双字节)
lc中文=lc中文+SUBSTR(lcString,I,2)
I=I+1
ln中文个数=ln中文个数+1
LOOP
ELSE
DO CASE
CASE UPPER(SUBSTR(lcString,I,1))$'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
lc英文=lc英文+SUBSTR(lcString,I,1)
ln英文个数=ln英文个数+1
CASE SUBSTR(lcString,I,1)=SPACE(1)
lc空格=lc空格+SUBSTR(lcString,I,1)
ln空格个数=ln空格个数+1
CASE SUBSTR(lcString,I,1)$'1234567890'
lc数字=lc数字+SUBSTR(lcString,I,1)
ln数字个数=ln数字个数+1
OTHERWISE
lc其他字符=lc其他字符+SUBSTR(lcString,I,1)
ln其他字符个数=ln其他字符个数+1
ENDCASE
ENDIF
ENDFOR
?'中文(含中文符号):'+ALLTRIM(STR(ln中文个数))+'个。是:"'+lc中文+'"'
?' 英文字母:'+ALLTRIM(STR(ln英文个数))+'个。是:"'+lc英文+'"'
?' 空格:'+ALLTRIM(STR(ln空格个数))+'个。是:"'+lc空格+'"'
?' 数字:'+ALLTRIM(STR(ln数字个数))+'个。是:"'+lc数字+'"'
?' 其他字符:'+ALLTRIM(STR(ln其他字符个数))+'个。是:"'+lc其他字符+'"'
ENDFUNC

-----------------------------------------------
方法二:

LOCAL aresult(5,2)
*Input '请输入字符串' To ctxt
ctxt='1324rka见证sj万d12 fklaj?adfj成长 a ;l d skj人flkqjdf中国'

cc_num(ctxt,@aresult)

? ' 中文个数:"'+aresult(1,1)+'",共'+ALLTRIM(STR(aresult(1,2)))+'个',
? ' 英文个数:"'+aresult(2,1)+'",共'+ALLTRIM(STR(aresult(2,2)))+'个',
? ' 空格个数:"'+aresult(3,1)+'",共'+ALLTRIM(STR(aresult(3,2)))+'个',
? ' 数字个数:"'+aresult(4,1)+'",共'+ALLTRIM(STR(aresult(4,2)))+'个',
? '其它字符个数:"'+aresult(5,1)+'",共'+ALLTRIM(STR(aresult(5,2)))+'个'

RETURN

FUNCTION cc_num
LPARAMETERS ctxt,aso
ntxtlen=LEN(ctxt)
FOR i=1 TO 5
aso(i,1)=""
aso(i,2)=0
ENDFOR

FOR i=1 TO ntxtlen
onechar=SUBSTR(ctxt,i,1)
DO CASE
CASE (onechar>='A' AND onechar<='Z') OR ( onechar>='a' AND onechar<='z')
aso(2,1) = aso(2,1) + onechar
aso(2,2) = aso(2,2) + 1
CASE onechar>='0' AND onechar<='9'
aso(4,1) = aso(4,1) + onechar
aso(4,2) = aso(4,2) + 1
CASE ASC(onechar)==32
aso(3,1) = aso(3,1) + onechar
aso(3,2) = aso(3,2) + 1
CASE ASC(onechar)>=160
IF i

 1<ntxtlen &&可以取下一个字符="" asc(substr(ctxt,i+1,1))="" if="">=160   
 2aso(1,1) = aso(1,1) + SUBSTR(ctxt,i,2) &amp;&amp;取二个字节   
 3aso(1,2) = aso(1,2) + 1   
 4i=i+1 &amp;&amp;因为取了二个字节   
 5ENDIF   
 6ENDIF   
 7OTHERWISE   
 8aso(5,1) = aso(5,1) + onechar   
 9aso(5,2) = aso(5,2) + 1   
10ENDCASE   
11ENDFOR   
12RETURN   
13ENDFUNC</ntxtlen>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus