说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Delphi中用拼音首字符序列来实现检索功能。

HTML文档下载 WORD文档下载 PDF文档下载
在Delphi中用拼音首字符序列来实现检索功能。

在日常工作和生活中我们经常使用电子记事本查找个人通讯录信息,或在单位的应用程序中查询客户档案或业务资料,这个过程中往往需要输入大量的汉字信息,对于熟悉计算机的人这已经是一件头疼的事,那些不太熟悉计算机或根本不懂汉字输入的用户简直就望而生畏。作为对数据检索技术的一种新的尝试,作者探索使用汉字拼音的首字符序列作为检索关键字,这样,用户不必使用汉字,只须简单地键入要查询信息的每个汉字的拼音首字符即可。比如你想查找关键字“中国人民银行”,你只需要输入“zgrmyh”。作者希望通过下面的例子,为广大计算机同行起一个抛砖引玉的作用,让我们开发的程序更加便捷、好用。

---- 原理很简单,找出汉字表中拼音首字符分别为“A”至“Z”的汉字内码范围,这样,对于要检索的汉字只需要检查它的内码位于哪一个首字符的范围内,就可以判断出它的拼音首字符。

---- 程序更简单,包括3个控件:一个列表存放着所有待检索的信息;一个列表用于存放检索后的信息;一个编辑框用于输入检索关键字(即拼音首字符序列)。详细如下:

---- 1.进入Delphi创建一个新工程:Project1

---- 2.在Form1上创建以下控件并填写属性:

控件类型 属性名称 属性值

Edit Name Search

ListBox Name SourceList

Items 输入一些字符串,如姓名等,用于提供检索数据

ListBox Name ResultList

3.键入以下两个函数

// 获取指定汉字的拼音索引字母,如:“汉”的索引字母是“H”

function GetPYIndexChar( hzchar:string):char;

begin

case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of

$B0A1..$B0C4 : result := 'A';

$B0C5..$B2C0 : result := 'B';

$B2C1..$B4ED : result := 'C';

$B4EE..$B6E9 : result := 'D';

$B6EA..$B7A1 : result := 'E';

$B7A2..$B8C0 : result := 'F';

$B8C1..$B9FD : result := 'G';

$B9FE..$BBF6 : result := 'H';

$BBF7..$BFA5 : result := 'J';

$BFA6..$C0AB : result := 'K';

$C0AC..$C2E7 : result := 'L';

$C2E8..$C4C2 : result := 'M';

$C4C3..$C5B5 : result := 'N';

$C5B6..$C5BD : result := 'O';

$C5BE..$C6D9 : result := 'P';

$C6DA..$C8BA : result := 'Q';

$C8BB..$C8F5 : result := 'R';

$C8F6..$CBF9 : result := 'S';

$CBFA..$CDD9 : result := 'T';

$CDDA..$CEF3 : result := 'W';

$CEF4..$D188 : result := 'X';

$D1B9..$D4D0 : result := 'Y';

$D4D1..$D7F9 : result := 'Z';

else

result := char(0);

end;

end;

// 在指定的字符串列表SourceStrs中检索符合拼音索引字符串PYIndexStr的所有字符串,并返回。

function SearchByPYIndexStr( SourceStrs:TStrings; PYIndexStr:string):string;

label NotFound;

var

i

j :integer;

hzchar :string;

begin

for i:=0 to SourceStrs.Count-1 do

begin

for j:=1 to Length(PYIndexStr) do

begin

hzchar:=SourceStrs[i][2*j-1] + SourceStrs[i][2*j];

if (PYIndexStr[j]<>'?') and

(UpperCase(PYIndexStr[j]) <> GetPYIndexChar(hzchar)) then

goto NotFound;

end;

if result='' then

result := SourceStrs[i]

else

result := result + Char(13) + SourceStrs[i];

NotFound:

end;

end;

4.增加编辑框Search的OnChange事件:

procedure TForm1.SearchChange(Sender: TObject);

var

ResultStr:string;

begin

ResultStr:='';

ResultList.Items.Text := SearchByPYIndexStr(Sourcelist.Items

Search.Text);

end;

---- 5.编译运行后,在编辑框Search中输入要查询字符串的拼音首字符序列,检索结果列表ResultList就会列出检索到的信息,检索中还支持“?”通配符,对于难以确定的的文字使用“?”替代位置,可以实现更复杂的检索。

---- 本程序在Delphi4.0中编译运行通过。

VB常见问题解答(1) VB程序中处理随机事件 VB的多媒体控件VBPLAY.VBX简介 VB技巧点滴 VB技巧汇编 (一) VB剪贴板的用法 VB开发CAI软件的小经验 VB软件设计中的几个问题 VB新手常见问题解答 VB修改注册表一特例 VB与VC混合编程中处理消息的方法 VB中的进制转换是怎样的? VB中调用带参数存储过程的实现(数据库) VB中感叹号“!”与圆点“.”的用法差异 VB中如何实现注册表的读写 VB中实现“擦视”技术 Visual Basic 2000年问题 Visual Basic 的未来 Visual Basic 命令分类表 Visual Basic三级跳 Visual Basic使用技巧 Visual Basic中的子类处理技术 Visual Basic中软件封面技术探秘 VisualBasic 软件设计中的几个问题 Windows 95/NT 运行了多长时间 -VB资料 Windows 的登录资料库 -VB资料 把回车键变成TAB键-VB资料 把文件置入到Text或RichText中 -VB资料 避免按 [ENTER] 回车键产生的“嘀”声 -VB资料 避免使用全局变量-VB资料 避免装载多份应用程序-VB资料 在PB8下面,MAIN窗口的MAXBOX = FALSE ,我设定这个窗口一打开的时候就最大化,为什么在这个窗口打开之后双击TITLE,窗口就变成了我设计的 CSDN论坛到底怎么了??? 一个和sql server连接问题? OO设计还有哪有原则? http://edu.sina.com.cn/l/2002-03-14/21924.html(看看吧~!!!多惨啊) 请问c的n次乘方函数是什么? 请各位大侠指教,关了类型转换的问题 学习Jive源代码要从那里入手 ★★★快来抢100分★★★:在bcb6里,我用import activex control添加组件怎么提示错误:E2347 Parameter mismatch in write access ?? 大家给推荐几个MM喜欢的小游戏吧 如何在一个基于对话框的界面上添加一个view 一个关于两个网页之间的传递及表单生成问题,请教! 在c/s之间,数据处理的问题 vb中的类的多样性,怎么表现出的? 谁能告诉我DELPHI6.0安装盘的序列号.送分,thanks!!! UFO 的秘密!最新发现,足以推翻以前任何种学说,想知道UFO真正的面目者,进来看看。 菜鸟问高手,如何在一个多文档程序中,关闭子窗口? 关于漂亮虫虫的疑惑 如何移动edit控件,使用什么函数?谢谢 servlet和JSP有何区别?(菜鸟级) template class declare? 请教一个很菜的问题,赶快请进 高手看过来,关于ipc的问题! 怎样在listbox中保存信息? 刚刚学习ASP,请问在哪里可以下载ASP的资料!!!!! swing中哪个类可以用作ToolBar中的按钮? 要能显示图象的 template 怎样更改trichedit鼠标指针样式? 我正在寻求仿XP菜单的源代码或控件,不知道哪位高手有????(email:zhem8@yeah.net) 关于创建不规则窗口的问题,请一定帮忙。谢谢!我只有100分了~~~~~~~~~~~~~~! 用cdonts发邮件时为什么把附件发到了内容当中,都是乱码,应该怎么改? Coledatetime同oracle8中的date类型相同吗? 关于操作系统 怎样拦截某个控件的消息? 请问怎么不加lib档又可以编译做好的dll?? 请问DivX的使用 请问有谁研究过USB接口的驱动????? 简单问题:怎么给我满意的答复加分呢? 救命啊。。。 9行程序崩溃WIN2000/xp 太、太、太好了!连帮助都是中文的,还可以继承、多线程,盗版比正版还提前发布。 关于C++的构造函数的问题 初学java网络编程的问题 KYLIX如何连接ORACLE? 有全套的ERP源代码出售 俺的机子装了Linux现在想改装WindowNT,用NT分区格式化后,咋一启动就显示LI,然后就不动了。 我安装了win2000和redhat Linux7.2,要启动盘才能进入Linux,怎样能在启动时选择进入 pb6.5 + personal oracle 815 连接数据库数据库出错!!! 哪位用VC编写XML处理程序的大侠: 100分求购密码登陆jsp程序 vb如何让我Happy 硫酸亚铁与氯气反应的方程式不要离子式 怎么鉴定红珊瑚的真假 有氯化钠和氯化钾的混合物,它所钾钠的物质的量的比为3:11.求氯化钾的质量分数2.含1mol氯离子的该混合物的质量 蚂蚁的英语单词怎么拼? 红珊瑚鉴别最近买了一个红珊瑚小枝子,用火烧的方法试了一下,发现受过高温的地方变成了灰白色,还略带一点黄色.这是红珊瑚吗.真品红珊瑚用火烧的话会是什么现象. 有一种氯化钠与氯化钾的混合物,它所含钾与钠的物质的量之比为3:1,求:(1)混合物中氯化钾的质量有一种氯化钠与氯化钾的混合物,它所含钾与钠的物质的量之比为3:1,求:(1)混合物中氯化钾的质 铁和硫酸反应生成氧气和硫酸亚铁的化学方程式 铊是一种什么金属?了解的朋友最好详细介绍下, 有一种氯化钠与氯化钾的混合物,它所含钾与钠的物质的量之比为3:1,求混合物中氯化钾的质量分数(2)含1mol氯离子的该混合物的质量 1.测出一胶头滴管的水的体积,再测出一滴管水共有几滴? 不锈钢316氮化处理后对抗腐蚀性有何影响 为什么纯金属结晶必须过冷?从能量角度考虑 高锰酸钾和硫酸亚铁氨反应的化学方程式是什么? 为什么不锈钢在除碳之后的抗腐蚀性更强 做盐酸和氢氧化钠的中和反应实验时,为什么要用胶头滴管将酸溶液滴入碱溶液? 纯铁比生铁更难发生点化学腐蚀 这句话对不? 两个问题,1,金属结晶的基本规律是什么?2,晶核的形核率和生长速率受哪些因素影响 怎么算氯化钾中的硫酸镁 为什么铁在潮湿空气中更易腐蚀 金属结晶的过程是一个什么和什么的过程 氯乙烷和氢氧化钠的水溶液反应能叫水解反应或者卤化反应吗? 醛基的碳原子除了跟氧原子通过双键连接外,另两个空位是不是只能和碳原子或氢原子连接呢? 新买的热水瓶里的味道要怎么除掉? 一氯乙烷与氢氧化钠的反应方程式及反应类型 一个手性碳原子左边连一个羟基,右边连一个醛基,上面连一个氢,下面连一个羟甲基怎么命名呀?(D/L) 氢氧化钠稀溶液可以与二氧化碳反应吗 要证明氯乙烷中氯元素的存在可以进行如下操作,其中顺序正确的是 ①加入AgNO3溶液,②加入NaOH溶液,③加热,,④加蒸馏水,⑤冷却后加入HNO3后酸化,⑥加入NaOH的乙醇溶液,A,④③①⑤ B,②③⑤① 普通胶头滴管怎样正确使用?滴管又怎样正确使用? S和NaOH的反应解释?就是为什么生成了那些东西 氯乙烷和氢氧化钠醇溶液共热化学方程式是什么主产物导入溴水生成什么 醇发生氧化反应,为什么羟基所在的碳原子上要有氢原子? 二氯乙烷与稀氢氧化钠溶液反应吗您好,我想知道二氯乙烷挥发气体与稀氢氧化钠溶液直接快速反应吗? 把氯乙烷假如NAOH水溶液中加热 再加入硝酸银溶液可生成白色沉淀 为什么这句话是错误的? 硫酸亚铁氧气和水方程式怎么配平 金属结晶的条件和驱动力是什么 氯化钠溶液蒸发时看到晶体析出就立即停止加热,会使氯化钠比实际值偏低吗?为什么? 硫酸亚铁溶液在氧气中氧化反应方程式?Fe3+是否沉淀? 新的热水瓶木塞如何去味道 蒸发操作时析出大量晶体时停止加热与析出晶膜时停止加热的异同…如题 硫酸亚铁与氧气的反应为什么硫酸亚铁或氯化亚铁溶液久置在空气中会慢慢变成硫酸铁和氯化铁是否因为亚铁离子在空气中被逐渐氧化成铁离子?如果是 请写出反应的方程式 如何去除暖瓶木塞松香味道呢 蒸发时,边蒸发边搅拌到有晶体出现时停止加热哪里操作错误? 烧开水的水壶如何去除其中的水垢 热水瓶木塞有味道,怎么去除 乙醇与金属反应时,为什么是乙醇分子中羟基中O-H键断裂,而不是甲基上的碳氢键断裂? 如何去除壶里的污垢,暖水壶和烧开水的壶里都有 怎样快速去除暖瓶木塞异味 碳酸钠晶体(Na2CO3・xH2O)的混合物,为了测定x值,某同学为了测定碳酸钠晶体Na2CO3・xH2O的x值,某同学将碳酸钠晶体放入坩埚中加热到不含结晶水,发生的反应为Na2CO3・xH2O==△==Na2CO3+xH2O 有机物中一个碳原子上可以同时连氢原子和羟基吗? 请问这块印度尼西亚珊瑚化石珊瑚玉化石的价格 将28.6g碳酸钠盐的结晶水合物(Na2CO3·xH2O)加热至完全失去结晶水,得到无水化合物10.6g,试求x的值 为什么必须在OH在连有羟基碳的相邻的碳原子上有氢原子则可以消去为什么必须有H?O、N什么的不行吗?不就是为了能形成不饱和键吗.那为什么不保证在连有羟基碳的碳原子上有氢原子或是其 与Al同元素且相邻元素的单质与氢氧化钠溶液反应的离子方程式 加热2.86克结晶碳酸钠(Na2co3.xH2O),除去结晶水后,剩余粉末质量为1.06克,则x值为A.2 B.5 C.7 D.10 亲,次氯酸与碳碳双键加成时拆成羟基与氯原子还是氢原子与氯氧基? 红珊瑚价格 红珊瑚鉴别 红珊瑚手链我想知道红珊瑚的价格 是什么样的我也想知道红珊瑚鉴别有哪些方法我更想知道,红珊瑚手链,在 哪里可以买到真的红珊瑚网 zv99.com 这上面介绍的内容有价 碳酸钠晶体NA2CO3-10H2O加热后会失水么?加热NA2CO3-10H2O后会有什么反应? 打一英语单词 蚂蚁本来无尾巴 如何鉴定红珊瑚的真伪啊..红珊瑚有什么作用啊, 将Na2CO3•xH2O晶体2.84g溶于水,配制成250mL溶液.取出20mL这种溶液放入锥形瓶中,再逐滴加入0.2mol/L盐酸,当消耗盐酸16mL时,溶液中的Na2CO3已全部转化为NaCl和CO2.求:(1)Na2CO3溶液的物质的量浓度.(2
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘