如何实现模糊查询,利用汉字拼音的首字母查汉字(vfp6.0)

时间:2023-01-23 08:00:19
如何实现模糊查询,利用汉字拼音的首字母查汉字

8 个解决方案

#1


先将汉字码表文件转换成TXT文件,然后再将TXT文件导入数据库,然后编写程序等到以下数据结构的表
汉字 拼音码1 拼音码2
啊   a
龙   l
结   j        g
下面的不用我去说了吧

#2


http://www.cx66.com/cxgzs/program/delphi/104.htm
这个对你应该有用

#3


不好意思本人才疏学浅,不懂汉字码表哪找?请多多指教!

#4


我可以给一个给你
rida@163.net

#5


xuexi 学习

#6


人家的文章贴给你看看

实用技巧 

在VFP中编程自动产生所输入汉字的拼音 
肇庆加美海外学校 
张镜明 
---- 我们在编写数据库应用软件时,常常需要设计对人名、地名等各种汉字信息进行查找的功能。如果只允许用
户输入汉字来查找,会使得查找功能不灵活,不完善;但如果允许用户输入汉字的拼音作为查找条件,除了多设
一个储存汉字拼音的字段外,最大的问题在于输入资料时还得额外输入汉字的拼音,大大增加了输入的工作量。
能不能通过编程的手段在输入汉字资料时自动产生其对应的拼音,从而解决这个矛盾呢?答案是肯定的,下面介
绍的方法就能让您轻松实现这个目的,为简单叙述起见,我们假设只需要产生汉字的声母,而不要韵母
(无声母的则取韵母的第一个字母)。 

---- 要自动产生拼音,首先必须有个汉字-拼音对照表。去哪里找这个表?自己动手可做一个。做表的方法较复
杂,要先用工具生成汉字与拼音对应的文本文件,再用编程的手段将需要的内容加在数据表中。下面介绍一种具
体的操作方法: 

---- 第一步,利用“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
---- 至此,自动产生拼音的工作可以说成功完成了。至于如何添加在你的资料表上,就不必罗嗦了
。这个方法为我们设计数据库应用软件带来了极大的好处,希望对大家有点启发作用。    

#7


如果只是针对姓名字段,不用这么复杂吧!

记得有一个工具/控件,vfp的,可以将姓名转化为拼音的,如:倪光南转为Ni Guangnan,当然并不可逆,可能用其转换出的拼音可能会查到此音的所有字,但已经可以满足要求了。

#8


楼上所说的控件在哪儿?如真有的话以后就省事了

#1


先将汉字码表文件转换成TXT文件,然后再将TXT文件导入数据库,然后编写程序等到以下数据结构的表
汉字 拼音码1 拼音码2
啊   a
龙   l
结   j        g
下面的不用我去说了吧

#2


http://www.cx66.com/cxgzs/program/delphi/104.htm
这个对你应该有用

#3


不好意思本人才疏学浅,不懂汉字码表哪找?请多多指教!

#4


我可以给一个给你
rida@163.net

#5


xuexi 学习

#6


人家的文章贴给你看看

实用技巧 

在VFP中编程自动产生所输入汉字的拼音 
肇庆加美海外学校 
张镜明 
---- 我们在编写数据库应用软件时,常常需要设计对人名、地名等各种汉字信息进行查找的功能。如果只允许用
户输入汉字来查找,会使得查找功能不灵活,不完善;但如果允许用户输入汉字的拼音作为查找条件,除了多设
一个储存汉字拼音的字段外,最大的问题在于输入资料时还得额外输入汉字的拼音,大大增加了输入的工作量。
能不能通过编程的手段在输入汉字资料时自动产生其对应的拼音,从而解决这个矛盾呢?答案是肯定的,下面介
绍的方法就能让您轻松实现这个目的,为简单叙述起见,我们假设只需要产生汉字的声母,而不要韵母
(无声母的则取韵母的第一个字母)。 

---- 要自动产生拼音,首先必须有个汉字-拼音对照表。去哪里找这个表?自己动手可做一个。做表的方法较复
杂,要先用工具生成汉字与拼音对应的文本文件,再用编程的手段将需要的内容加在数据表中。下面介绍一种具
体的操作方法: 

---- 第一步,利用“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
---- 至此,自动产生拼音的工作可以说成功完成了。至于如何添加在你的资料表上,就不必罗嗦了
。这个方法为我们设计数据库应用软件带来了极大的好处,希望对大家有点启发作用。    

#7


如果只是针对姓名字段,不用这么复杂吧!

记得有一个工具/控件,vfp的,可以将姓名转化为拼音的,如:倪光南转为Ni Guangnan,当然并不可逆,可能用其转换出的拼音可能会查到此音的所有字,但已经可以满足要求了。

#8


楼上所说的控件在哪儿?如真有的话以后就省事了