vfp中如何将汉字转为拼音

流星尔 2003-08-07 10:00:37
1、vfp函数(摘自myf1,改正了其中的参数中有空格的BUG)

******汉字转拼音*****
func hztostr(hzstr) as string
local py,i,j,c
private p0
p0="吖八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗"
py=""
for i=1 to lenc(hzstr)
C='z'
IF EMPTY(ALLTRIM(SUBSTRC(hzstr,i,1)))
c=''
ELSE

for j=1 to 26
if substrc(hzstr,i,1)<substrc(p0,j,1)
C=chr(95+j)
EXIT
endif
NEXT
endif
py=py+C
next
retu py

在vfp中调用
set proc to sysproc
?hztostr('刘建军') 结果显示ljj

2、sql server用户自定义函数

CREATE function dbo.hztostr(@hzstr varchar(200))
returns varchar(400)
as
begin

declare @py varchar(800),@i int,@j int,@c varchar(10),@p0 varchar(800),@cSTR varchar(10)
set @p0='吖八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗'
set @py=''
set @i=1
set @j=1
while @i<=len(@hzstr)
begin
set @c='z'
set @cSTR=substring(@hzstr,@i,1)

if @cstr=''
set @c=''
else
begin

if not unicode(@cSTR) between 19968 and 40870
set @c=@cSTR
else
set @j=1

while @j<=26
begin
if @cSTR<substring(@p0,@j,1)
begin
set @c=char(95+@j)
break
end
set @j=@j+1
end
end
set @py=@py+@c
set @i=@i+1
end
return @py
end
go

然后在查询分析中调用
select dbo.hztostr('刘建军') 结果显示ljj


...全文
329 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aabiao 2003-08-07
  • 打赏
  • 举报
回复
即使使用码表法,多音字也无法解决,要解决多音字是不可能的。
若要做,必须使用巨大的词组库与人工智能,这样也不可能完全解决,总有一些人名/地名是无法解决的。
楼上的VFP代码在MYF1上发表后,经网友多次修改,一直有人说多音字的问题。其实这么简单的代码能解决GBK汉字的首拼音问题已经不错了,不要指望能解决所有的问题。有人甚至说大小写、字符的处理等,自己改一改不就行了?
To xiolig:
这个不是通过内码的,内码只有一级汉字3755个是按拼音排列的,楼上的代码适用于20000多的GBK汉字。当然有若干BUG,其中GBK中有20来个,如“她”就是错的。
xiolig 2003-08-07
  • 打赏
  • 举报
回复
这是通过汉字的机内码顺序获取汉字的声母,局限性比较大,适应范围有限。
在DOS环境下,我们曾经通过调用UCDOS的反查输入码功能获取汉字的输入码。
是不是可以考虑直接读取WINDOWS下的拼音输入法文件来获取汉字的拼音。
MS WORD似乎有类似的拼音标注功能,不知微软是通过什么方法获取的。

多音字是个难题。
流星尔 2003-08-07
  • 打赏
  • 举报
回复
sql server函数为net_steven(吃素的狼所写),该函数存在的一个问题就是不能解决多音字的问题

比如银行会翻译为yx
liuri璇玑 2003-08-07
  • 打赏
  • 举报
回复
先留个脚印:D
流星尔 2003-08-07
  • 打赏
  • 举报
回复
aabiao说的对,多音字是无法解决的。

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧