Delphi用拼音首字符序列实现检索功能
在日常工作和生活中我们经常使用电子记事本查找个人通讯录信息 或在单位的应用程序中查询客户档案或业务资料 这个过程中往往需要输入大量的汉字信息 对于熟悉计算机的人这已经是一件头疼的事 那些不太熟悉计算机或根本不懂汉字输入的用户简直就望而生畏 作为对数据检索技术的一种新的尝试 作者探索使用汉字拼音的首字符序列作为检索关键字 这样 用户不必使用汉字 只须简单地键入要查询信息的每个汉字的拼音首字符即可 比如你想查找关键字 中国人民银行 你只需要输入 zgrmyh 作者希望通过下面的例子 为广大计算机同行起一个抛砖引玉的作用 让我们开发的程序更加便捷 好用
原理很简单 找出汉字表中拼音首字符分别为 A 至 Z 的汉字内码范围 这样 对于要检索的汉字只需要检查它的内码位于哪一个首字符的范围内 就可以判断出它的拼音首字符
程序更简单 包括 个控件 一个列表存放著所有待检索的信息 一个列表用于存放检索后的信息 一个编辑框用于输入检索关键字(即拼音首字符序列) 详细如下
.进入Delphi创建一个新工程 Project
.在Form 上创建以下控件并填写属性
控件类型 属性名称 属性值 Edit Name Search ListBox Name SourceList Items 输入一些字符串 如姓名等 用于提供检索数据 ListBox Name ResultList
.键入以下两个函数
// 获取指定汉字的拼音索引字母 如 汉 的索引字母是 H function GetPYIndexChar( hzchar:string):char; begin case WORD(hzchar[ ]) shl + WORD(hzchar[ ]) of $B A $B C : result := A ; $B C $B C : result := B ; $B C $B ED : result := C ; $B EE $B E : result := D ; $B EA $B A : result := E ; $B A $B C : result := F ; $B C $B FD : result := G ; $B FE $BBF : result := H ; $BBF $BFA : result := J ; $BFA $C AB : result := K ; $C AC $C E : result := L ; $C E $C C : result := M ; $C C $C B : result := N ; $C B $C BD : result := O ; $C BE $C D : result := P ; $C DA $C BA : result := Q ; $C BB $C F : result := R ; $C F $CBF : result := S ; $CBFA $CDD : result := T ; $CDDA $CEF : result := W ; $CEF $D : result := X ; $D B $D D : result := Y ; $D D $D F : result := Z ; else result := char( ); end; end;
// 在指定的字符串列表SourceStrs中检索符合拼音索引字符串 PYIndexStr的所有字符串 并返回 function SearchByPYIndexStr ( SourceStrs:TStrings; PYIndexStr:string):string; label NotFound; var i j :integer; hzchar :string; begin for i:= to SourceStrs Count do begin for j:= to Length(PYIndexStr) do begin hzchar:=SourceStrs[i][ *j ] + SourceStrs[i][ *j]; if (PYIndexStr[j]<> ? ) and (UpperCase(PYIndexStr[j]) <> GetPYIndexChar(hzchar)) then goto NotFound; end; if result= then result := SourceStrs[i] else result := result + Char ( ) + SourceStrs[i]; NotFound: end; end;
.增加编辑框Search的OnChange事件
procedure TForm SearchChange(Sender: TObject); var ResultStr:string; begin ResultStr:= ; ResultList Items Text := SearchByPYIndexStr (Sourcelist Items Search Text); end;
.编译运行后
在编辑框Search中输入要查询字符串的拼音首字符序列 检索结果列表ResultList就会列出检索到的信息 检索中还支持 ? 通配符 对于难以确定的的文字使用 ? 替代位置 可以实现更复杂的检索
lishixinzhi/Article/program/Delphi/201311/24877
绛旓細鏂规硶锛氶鍏堝湪Edit1涓鐨勫瓧绗︿覆鈥1949骞(===)Y27G3ADC<===>2008骞 鈥濅腑鎵惧埌鈥滐紙===锛夆濆拰鈥<===>鈥濈殑浣嶇疆锛岀劧鍚庡皢鍏堕棿鐨勫瓧绗︿覆鎻愬彇鍑烘潵鍗冲彲銆備唬鐮佸涓嬶細procedure TForm1.Button1Click(Sender: TObject);var s1,s2: string;p1,p2: integer;begin s1 := Edit1.Text;p1 := Pos('(===)...
绛旓細閫氬父鍦ㄤ娇鐢ㄨ繖绉嶆柟寮忔椂锛屽簲璇ョ敤DataSnap锛堜互鍓嶅彨Midas锛夋妧鏈潵鎻愪緵鍙屽悜娓告爣鐨勫簲鐢紝骞朵笖鐢═ClientDataset鐨凞ata锛孌elta灞炴ф潵鐏垫椿鐨勫簭鍒鍖朌ataset锛岃屽疄鐜板灞傛澗鑰﹀悎绯荤粺銆5.绗3鏂圭殑椹卞姩 杩欎簺鎴戜竴涓兘娌″湪瀹為檯 涓娇鐢ㄨ繃锛岄氬父浠ョ粍浠剁殑褰㈠紡鎻愪緵锛屾垜鎵鐭ョ殑濡傝繛鎺racle鐨凮dac锛岃繛鎺s/400鐨凞elphi400銆傘傘傛渶鍚...
绛旓細杩欎釜鍙互閫氳繃鏌ヨ浣跨敤鑰呯殑纭洏搴忓垪鍙鏉ュ疄鐜帮紝1锛岃鍙栫‖鐩樺簭鍒楀彿锛堢綉涓婃壘涓涓嬶紝寰堝鐨勶級锛岄氳繃绠楁硶杩涜鏁板艰浆鎹紝鎳掔殑璇濓紝鐩存帴鎼滀竴涓狹D5杞崲锛岃浆鎴愪竴涓壒娈鐨勫瓧绗︿覆锛岃繖涓氨鏄敞鍐岀爜锛岃繖浜涙槸鏀惧湪绋嬪簭鍐呴儴鏉ュ垽鏂殑銆傚疄鐜版敞鍐岀爜鐨勬柟娉曪細杞欢缁欏鎴风敤涓婏紝浼氳嚜鍔ㄨ鍙栫‖鐩樺簭鍒楀彿锛屽苟鏄剧ず鍦ㄨ蒋浠朵笂锛岃姹傛妸杩欎釜鍙...
绛旓細璁捐鏃 浠abel InputEdit鐨刅isible灞炴т负False 閫氳繃璁剧疆PassWord鐨凱assWordChar鍙互纭畾杈撳叆鍙d护鏃跺洖鏄惧湪灞忓箷涓鐨勫瓧绗 鑷畾涔夊紓甯窫InvalidPassWord鍜孍InvalidInput鍒嗗埆鐢ㄤ簬琛ㄧず杈撳叆鐨勫彛浠ら潪娉曞拰鏁板瓧闈炴硶 瀹冧滑閮芥槸鑷畾涔夊紓甯窫InValidation鐨勫瓙绫 鑰孍InValidation鐩存帴浠嶦xception寮傚父绫绘淳鐢 涓嬮潰鏄笁涓紓甯哥被鐨勫畾涔 type E...
绛旓細ReadBuffer杩欎釜鍑芥暟鍦ㄥ疄鐜颁簡杈撳叆杈撳嚭娴佷篃灏辨槸搴忓垪鍖栨搷浣滅殑寰堝绫婚噷闈㈤兘鏈夛紝鏈夊緢澶氱閲嶈浇鐨勭増鏈紝浣嗘槸鍏跺熀鏈惈涔夊涓嬶細浠庝竴涓寚瀹氱殑buffer涓鍙栨渶澶歯涓暟鎹紝濡傛灉buffer涓暟鎹ぇ灏弇涓嶅n鍒欏彧璇诲彇m涓紝濡傛灉澶т簬n鍒欒鍙杗涓
绛旓細鐢ㄦ埛鍐嶅湪杞欢涓緭鍏ユ敞鍐岀爜,绋嬪簭姣忔鍚姩鏃,閮芥鏌ユ敞鍐岀爜,濡傛灉娌℃湁娉ㄥ唽鐮佹垨鑰呮敞鍐岀爜涓嶅,绋嬪簭閮戒笉杩愯.鐢宠鐮,瀹為檯涓婂氨鏄敤鎴风數鑴戠殑涓绘澘搴忓垪鍙鎴栬匔PU搴忓垪鍙风瓑绛,娉ㄥ唽鐮佸氨鏄牴鎹敵璇风爜杩涜鍔犲瘑鍚庣殑浜岃繘鍒剁紪鐮,褰撶劧杩欐牱鍋氬緢瀹规槗琚牬瑙,蹇呴』鍔犲叆瀵嗛挜,鎵璋撳瘑閽,灏辨槸鍦ㄧ敵璇风爜涓啀鍔犲叆涓浜瀛楃鍚庡啀杩涜浜岃繘鍒...
绛旓細澶ч儴鍒嗕竴鏈轰竴鐮佺殑鍔犲瘑閮芥槸鐢ㄧ幇鎴愯蒋浠舵潵鍋氱殑锛屾瘮濡傝薄zprotect锛屼娇鐢ㄤ笂寰堢畝鍗曡嚜宸辩湅鐪嬪氨鐭ラ亾浜嗐
绛旓細1 2 3 4 5 6 7 8 9 灏卞儚杩欐牱锛屾帓鍒楃殑缁欎粬鐨勪綅缃浐瀹氬ソ锛岀劧鍚庢瘡涓涓牸瀛愯〃绀轰竴涓瓧绗︽垨鑰呰瀛楃涓锛岃繘鑰岀敤鎴锋粦鍔ㄧ殑鏃跺欙紝灏嗗搴旂殑浣嶇疆搴忓垪杩涘叆鍒颁竴涓垪琛ㄤ腑鍘讳繚瀛橈紝鐒跺悗榧犳爣鏀惧紑鐨勬椂鍊欙紝閭d箞鍏ラ槦鐨勯夋嫨浣嶇疆杩涜缁勫悎锛岄偅涔堝氨鏄搴旂殑瀵嗙爜浜嗭紝姣斿 杩欐牱鐨勮緭鍏ュ氨鏄〃绀123锛屽姝ら『搴...
绛旓細涓嶈繃锛屾偍鐨勫啓娉曟垜涓嶈禐鍚岋紝鎴戝啓涓娈碉紝浠呬緵鍙傝冦傛樉绀洪渶瑕佸垹闄ょ殑椤圭洰 if listbox1.itemindex>-1 then begin edit2.text:= inttostr(listbox1.itemindex); //鏄剧ず闇瑕佸垹闄ら」鐩殑搴忓彿 edit3.text:=listbox1.Items[listbox1.ItemIndex]; //鏄剧ず闇瑕佸垹闄ら」鐩殑鍏蜂綋瀛楃涓 listbox1.DeleteSelected ; ...
绛旓細閫氬父鍦ㄤ娇鐢ㄨ繖绉嶆柟寮忔椂锛屽簲璇ョ敤DataSnap锛堜互鍓嶅彨Midas锛夋妧鏈潵鎻愪緵鍙屽悜娓告爣鐨勫簲鐢紝骞朵笖鐢═ClientDataset鐨凞ata锛孌elta灞炴ф潵鐏垫椿鐨勫簭鍒鍖朌ataset锛岃屽疄鐜板灞傛澗鑰﹀悎绯荤粺銆5.绗3鏂圭殑椹卞姩 杩欎簺鎴戜竴涓兘娌″湪瀹為檯 涓娇鐢ㄨ繃锛岄氬父浠ョ粍浠剁殑褰㈠紡鎻愪緵锛屾垜鎵鐭ョ殑濡傝繛鎺racle鐨凮dac锛岃繛鎺s/400鐨凞elphi400銆傘傘傛渶鍚...