在日常工作和生活中我們經常使用電子記事本查找個人通訊錄信息
或在單位的應用程序中查詢客戶檔案或業務資料
這個過程中往往需要輸入大量的漢字信息
對於熟悉計算機的人這已經是一件頭疼的事
那些不太熟悉計算機或根本不懂漢字輸入的用戶簡直就望而生畏
作為對數據檢索技術的一種新的嘗試作者探索使用漢字拼音的首字符序列作為檢索關鍵字這樣用戶不必使用漢字只須簡單地鍵入要查詢信息的每個漢字的拼音首字符即可比如你想查找關鍵字中國人民銀行你只需要輸入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就會列出檢索到的信息檢索中還支持?通配符對於難以確定的的文字使用?替代位置可以實現更復雜的檢索
From:http://tw.wingwit.com/Article/program/Delphi/201311/8459.html