在日常工作和生活中我们经常使用电子记事本查找个人通讯录信息或在单位的应用程序中查询客户档案或业务资料这个过程中往往需要输入大量的汉字信息对于熟悉计算机的人这已经是一件头疼的事那些不太熟悉计算机或根本不懂汉字输入的用户简直就望而生畏作为对数据检索技术的一种新的尝试作者探索使用汉字拼音的首字符序列作为检索关键字这样用户不必使用汉字只须简单地键入要查询信息的每个汉字的拼音首字符即可比如你想查找关键字中国人民银行你只需要输入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
$BA$BC : result := A;
$BC$BC : result := B;
$BC$BED : result := C;
$BEE$BE : result := D;
$BEA$BA : result := E;
$BA$BC : result := F;
$BC$BFD : result := G;
$BFE$BBF : result := H;
$BBF$BFA : result := J;
$BFA$CAB : result := K;
$CAC$CE : result := L;
$CE$CC : result := M;
$CC$CB : result := N;
$CB$CBD : result := O;
$CBE$CD : result := P;
$CDA$CBA : result := Q;
$CBB$CF : result := R;
$CF$CBF : result := S;
$CBFA$CDD : result := T;
$CDDA$CEF : result := W;
$CEF$D : result := X;
$DB$DD : result := Y;
$DD$DF : 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 SourceStrsCount 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 TFormSearchChange(Sender: TObject);
var ResultStr:string;
begin
ResultStr:=;
ResultListItemsText := SearchByPYIndexStr
(SourcelistItems SearchText);
end;
.编译运行后
在编辑框Search中输入要查询字符串的拼音首字符序列检索结果列表ResultList就会列出检索到的信息检索中还支持?通配符对于难以确定的的文字使用?替代位置可以实现更复杂的检索
本程序在Delphi中编译运行通过