本站首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接

我的博客

Blog信息
blog名称:fermos_blog
日志总数:73
评论数量:261
留言数量:30
访问次数:398813
建立时间:2005年3月27日




在VFP中编程自动产生所输入汉字的拼音
软件技术

fermos的博客 发表于 2005/9/8 7:54:55

在VFP中编程自动产生所输入汉字的拼音 http://www.pcdog.com 2004-10-31 互联网   我们在编写数据库应用软件时,常常需要设计对人名、地名等各种汉字信息进行查找的功能。如果只允许用户输入汉字来查找,会使得查找功能不灵活,不完善;但如果允许用户输入汉字的拼音作为查找条件,除了多设一个储存汉字拼音的字段外,最大的问题在于输入资料时还得额外输入汉字的拼音,大大增加了输入的工作量。能不能通过编程的手段在输入汉字资料时自动产生其对应的拼音,从而解决这个矛盾呢?答案是 500)this.width=500'>肯定的,下面介绍的方法就能让您轻松实现这个目的,为简单叙述起见,我们假设只需要产生汉字的声母,而不要韵母(无声母的则取韵母的第一个字母)。 ---- 要自动产生拼音,首先必须有个汉字-拼音对照表。去哪里找这个表?自己动手可做一个。做表的方法较复杂,要先用工具生成汉字与拼音对应的文本文件,再用编程的手段将需要的内容加在数据表中。下面介绍一种具体的操作方法: ---- 第一步,利用“Windows 95附件”中“输入法生成器”的逆转化功能,将拼音输入法的码表文件“c:\windows\system\winpy.mb”逆转换为文本文件“c:\winpy.txt”(当然转换后的文件任您取名和指定位置)。用写字板打开此文本文件,可以看到这样的文字: [Description] Name=全拼 MaxCodes=12 MaxElement=1 UsedCodes=abcdefghijklmnopqrstuvwxyz WildChar=? NumRules=3 [Rule] ca4=p10+p20+p30+p40 ce2=p10+p20 ce3=p10+p20+p30 [Text] 啊a 阿a 呵a 吖a 嗄a 腌a 锕a 阿爸aba 阿昌achang ---- 显然,最前面12行此时对于我们来讲是完全无用的,可用手工将之删除。另外,文件中还有大量的词的编码,如“阿爸aba”、“阿昌achang”等,对我们也是无用的,如何将之去掉使得文件中只保留单字及其编码呢?用手工显然太麻烦,只能靠一段小程序了。我们这样考虑,如果某行是单字及其编码,则这行的第三个字符肯定是字母,可以取这行的前三个字符存放在另一个文件中;而如果某行是词,则第三个字符是汉字的一部分,其asc值在128以上,我们就不用管它。 ---- 下面给出这段小程序: newfile=Fcreate('c:\py.txt') &&创建文件,用于储存单字及其编码的文本 oldfile=Fopen('c:\winpy.txt') && 打开文件 =Fseek(oldfile, 0) && 移动指针到文件头 Do while not feof(oldfile) c=left(Fgets(oldfile),3) if asc(right(c,1))< 128 then cc=chr(34)-left(c,2)-chr(34)-","-chr(34)-right(c,1)-chr(34) =FPUTS(newfile, cc) &&以"字","z" 这样的格式写在新文件里 endif Enddo = Fclose(newfile) && 关闭文件 = Fclose(oldfile) && 关闭文件 creat table py (汉字 c(2),拼音 c(1)) &&创建新表 use py &&打开此表 append from c:\py.txt type delimited &&从文本中追加数据 use ---- 运行这段程序后,一个存有汉字和拼音首个字母的表PY就产生了。将这个表加入到我们的数据库中,并根据汉字建立索引,就可以使用这个表了。 ---- 接下来要解决的问题是:输入汉字后,如何将之转换为拼音呢?假设在一个表单里已经建立了一个名为“汉字”的文本框用于输入汉字和一个名为“拼音”的文本框用于显示汉字对应的拼音。我们可在“汉字”这个文本框的LostFoucs事件中写入如下代码: local a,b,c c="" b="" a=thisform.汉字.value select py &&假设此表在此之前已经打开且已经指定索引 for i=2 to len(a) step 2 store right(left((a),i),2) to b seek b store c-py.拼音 to c next i thisform.拼音.value=c ---- 至此,自动产生拼音的工作可以说成功完成了。至于如何添加在你的资料表上,就不必罗嗦了。这个方法为我们设计数据库应用软件带来了极大的好处,希望对大家有点启发作用。


阅读全文(1690) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.029 second(s), page refreshed 144800600 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号