在Delphi中用拼音首字串行來實現檢索功能

2021-03-31 08:56:58 字數 2896 閱讀 9894

在日常工作和生活中我們經常使用電子記事本查詢個人通訊錄資訊,或在單位的應用程式中查詢客戶檔案或業務資料,這個過程中往往需要輸入大量的漢字資訊,對於熟悉計算機的人這已經是一件頭疼的事,那些不太熟悉計算機或根本不懂漢字輸入的使用者簡直就望而生畏。作為對資料檢索技術的一種新的嘗試,作者探索使用漢字拼音的首字串行作為檢索關鍵字,這樣,使用者不必使用漢字,只須簡單地鍵入要查詢資訊的每個漢字的拼音首字元即可。比如你想查詢關鍵字「中國人民銀行」,你只需要輸入「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;

vari, 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就會列出檢索到的資訊,檢索中還支援「?」萬用字元,對於難以確定的的文字使用「?」替代位置,可以實現更複雜的檢索。 

本程式在delphi5.0中編譯執行通過。

sqlserver取字串拼音首字母

sqlserver 使用函式獲取乙個字串的拼音首字母 create function dbo.fn getpinyin str nvarchar max returns nvarchar max as begin declare word nchar 1 py nvarchar max set py...

delphi 字串 生成拼音碼

獲取拼音碼函式 function getpy 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 b4e...

將字元或者字串轉換為拼音首字母類

using system using system.data using system.configuration using system.web using system.web.security using system.web.ui using system.web.ui.webcontro...