加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

如何区分一个String串中的字母数字和汉字? 编程

(2007-09-23 23:00:42)
标签:

我记录

财富人生

证券/理财

分类: 股票、财经__博客张凯_unikran
 字母的Ascii码是128以下,汉字是128以上(准确一点应该是比128大的一个数,不过简单用的话大于128就行了),判断一下就行了。 


//假设a是你取出的一个字符

if asc(x)<0
 
那么a是字母;
else
a为汉字的一部分,继续取下一位以组成一个汉字
 
 ========================
clear
use zq
*该数据库2个字段:z c,254, z1, c ,254
dele all
pack
appe from  3.txt type sdf
scan
b=allt(z)
for i=1 to len(b)
if asc(substr(b,i,1))>=128
qi=left(b, i-1)
qki=right(b,len(b)-i+1)
repl z with qi
repl z1 with qki
exit
endif
endfor
endscan
brow
*
*close all
*copy file zpz.dbf to zpz1.dbf
*只要Z中包含目标文档中的字符串,并把这些字符串,赋給一个数组,然后再确定**这些字符串是否出现在词汇数据库中的z字段中,如果出现,就把Z和z1,赋给字
*符串数据库的另一个字段,当然可能出现很多个匹配的内容,就添加多条记录,
*当然实际上是发现一条,输入一条,发现多条就输入多条。。。
*最后导出这个库。
*而且用这种方法,你还可以学习其他国家的语言,而不用记忆单词了。
*效果很好。。。
*这样你就可以大略地了解世界上的各种主要语言了。。
*这是一种很好的方法。。。
*当然不用上面的程序那么复杂,只需要找到一个符合的字符串就可以了,当然如果*字符串太长,确实需要分割,这才需要上面的切分程序。
*你只需要将英文词汇的那个程序将一个文件分成词汇,然后再看
*是否存在 在词汇数据库的字符串中。
*当然实际上是发现一条,输入一条,发现多条就输入多条。。。
 ==============

clear
dime  y(10000)
for i=1  to 10000
store "" to y(i)
endfor
use zq
*该数据库1个字段:z c,254

dele all
pack
appe from  ap.txt type sdf
pp=0
scan
b=allt(z)
if at(" ",b)=0
pp=pp+1
store   to y(pp)
*?y(PP)
endif
do while at(" ",b)<>0
&&
pp=pp+1
jpp=at(" ",b)
*?jpp
bqq=left(b,jpp)
*?bqq
b=allt(substr(b,jpp+1,len(b)-jpp))
*?b
store   bqq to y(pp)
*?y(pp)
*?"ok1"
endif
if at(" ",b)=0
pp=pp+1
store   b to y(pp)
*?y(pp)
*wait
endif
enddo

*如果是字母,则继续查找,pk=1 , 如果不是字母,也继续查找, 直到找到赋给pk=x?
*当pk<>0,说明至少有一个字母
*继续查找,如果pk1<>0 ,说明存在一个字符串,将该字符串取出,赋给PPP,并直接加上网址字符串
*然后再从ppp后面重新开始找,重复上面的过程。。。
endscan


dele all
pack
for j=1 to 10
for i=1 to 10000
if  at(",",y(i))<>0
store left(y(i),len(y(i))-1) to y(i)
endif
if  at(".",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at('"',y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at("'",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at(";",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif

if  at("-",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif

endfor
endfor

for i=1 to 10000
appe blank
repl z with y(i)
endfor
dele for len(allt(z))=0
pack

brow

 

 ==================

 

*初步定稿 

clear
dime  y(10000)
dime j(10000,2)
for i=1  to 10000
store "" to y(i)

endfor
use zq
*该数据库1个字段:z c,254

dele all
pack
appe from  ap.txt type sdf

pp=0
scan
b=allt(z)
if at(" ",b)=0
pp=pp+1
store   to y(pp)
*?y(PP)
endif
do while at(" ",b)<>0
&&
pp=pp+1
jpp=at(" ",b)
*?jpp
bqq=left(b,jpp)
*?bqq
b=allt(substr(b,jpp+1,len(b)-jpp))
*?b
store   bqq to y(pp)
*?y(pp)
*?"ok1"
endif
if at(" ",b)=0
pp=pp+1
store   b to y(pp)
*?y(pp)
*wait
endif
enddo

*如果是字母,则继续查找,pk=1 , 如果不是字母,也继续查找, 直到找到赋给pk=x?
*当pk<>0,说明至少有一个字母
*继续查找,如果pk1<>0 ,说明存在一个字符串,将该字符串取出,赋给PPP,并直接加上网址字符串
*然后再从ppp后面重新开始找,重复上面的过程。。。
endscan


dele all
pack
j=1
do while j<10
for i=1 to 10000
if  at(",",y(i))<>0
store left(y(i),len(y(i))-1) to y(i)
endif
if  at(".",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at('"',y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at("'",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at(";",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at("-",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
endfor
j=j+1
enddo
?"ok"
for i=1 to 10000
appe blank
repl z with y(i)
endfor
dele for len(allt(z))=0
pack

brow


for i=1  to 10000
store "" to y(i)
endfor

ok=reccount()
?ok
for i=1 to ok
go i
store  allt(z)   to  y(i)
endfor

use zpz3
dele all
pack
appe from  ap.txt type sdf
brow
po=0
for i=1 to ok
scan
if at(y(i),z)<>0 and len(y(i))>5

*5是代表词汇最少也要6位长,否则的话,由于an,to,and,the,to等词汇出现频率

*高,而且没有实际用途,因此忽略。
po=po+1
store allt(z)  to j(po,1)
*?y(i)
*?j(po,1)
store allt(y(i)) to j(po,2)
endif
endscan
endfor
dele all
pack
?po
for i=1 to po
if len(j(i,1))<>0
appe blank
repl z with j(i,1)
repl z1 with j(i,2)
endif
endfor
brow

==========

*最终定稿
USE 3
DELE ALL
PACK
USE
clear
dime  y(10000)
dime j(10000,2)
for i=1  to 10000
store "" to y(i)

endfor
use zq
*该数据库1个字段:z c,254

dele all
pack
appe from  xzk.txt type sdf

pp=0
scan
b=allt(z)
if at(" ",b)=0
pp=pp+1
store   to y(pp)
*?y(PP)
endif
do while at(" ",b)<>0
&&
pp=pp+1
jpp=at(" ",b)
*?jpp
bqq=left(b,jpp)
*?bqq
b=allt(substr(b,jpp+1,len(b)-jpp))
*?b
store   bqq to y(pp)
*?y(pp)
*?"ok1"
endif
if at(" ",b)=0
pp=pp+1
store   b to y(pp)
*?y(pp)
*wait
endif
enddo

*如果是字母,则继续查找,pk=1 , 如果不是字母,也继续查找, 直到找到赋给pk=x?
*当pk<>0,说明至少有一个字母
*继续查找,如果pk1<>0 ,说明存在一个字符串,将该字符串取出,赋给PPP,并直接加上网址字符串
*然后再从ppp后面重新开始找,重复上面的过程。。。
endscan


dele all
pack
j=1
do while j<10
for i=1 to 10000
if  at(",",y(i))<>0
store left(y(i),len(y(i))-1) to y(i)
endif
if  at(".",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at('"',y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at("'",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at(";",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
if  at("-",y(i))<>0
store  left(y(i),len(y(i))-1) to y(i)
endif
endfor
j=j+1
enddo
?"ok"
for i=1 to 10000
appe blank
repl z with y(i)
endfor
dele for len(allt(z))=0
pack

brow


for i=1  to 10000
store "" to y(i)
endfor

ok=reccount()
COUNT TO JOOOOO  FOR LEN(ALLT(Z))>5
?JOOOOO
wait
for i=1 to ok
go i
store  allt(z)   to  y(i)
endfor

use zpz3

*该库必须保存,为词汇原始库。两个字段, 均为C, 254

brow
po=0
for i=1 to ok
scan
if at(y(i),z)<>0 and len(y(i))>5

*5是代表词汇最少也要6位长,否则的话,由于an,to,and,the,to等词汇出现频率

*高,而且没有实际用途,因此忽略。
po=po+1
pok=z
POK1=Z1
use  3.dbf
appe blank
repl  z1  with allt(pok)
REPL Z2  WITH ALLT(POK1)
*?Z1
repl  with allt(y(i))
*?Z
use zpz3

*三个字段, 均为c, 254
EXIT
endif
endscan
endfor
USE ZQ
dele all
pack
use 3
brow
list to zk.txt

*为什么最后数据库中只有561个记录呢?因为有些找不到对应记录的词汇,就没有

*显示出来

 ================

use zq
dele all
pack
appe from cihui1.xls type xls
dele for len(allt(z))<2
pack
scan
if at("?",z)<>0
repl z with stuff(z,at("?",z),1," ")
endif
endscan
brow

==================


 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有