unit hztopy;//汉字to拼音
interface
uses Windows, Messages, SysUtils, Classes, Forms,
Controls, ComCtrls, CommCtrl, DsgnIntf, dialogs;
function GetPYIndexChar(hzchar: string): string; //返回一个汉字的拼音首字符
function getpystring(hzstring: string): string; //返回一个汉字串的拼单首字符串
function SearchByPYIndexStr(SourceStrs: TStrings; PYIndexStr: string): string; //从Tstrings 中找到所有拼音首字符串中有PYindexstr的字符串
implementation
function getpystring(hzstring: string): string;
var
i: integer;
str: array[1..255] of string;
hz: string;
hzstr: string;
begin
hzstr := hzstring;
i := 0;
while hzstr <> '' do
begin
if (ord(hzstr[1]) >= 33) and (ord(hzstr[1]) <= 126) then
begin
str := copy(hzstr, 0, 1);
hzstr := copy(hzstr, 2, length(hzstr) - 1);
end
else if ord(hzstr[1]) > 127 then
begin
hz := copy(hzstr, 0, 2);
hzstr := copy(hzstr, 3, length(hzstr) - 2);
str := getpyindexchar(hz);
end;
if result = '' then result := str
else result := result + str;
i := i + 1;
end;
end;
function GetPYIndexChar(hzchar: string): string;
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;
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[2 * j - 1]
+ SourceStrs[2 * j];
if (PYIndexStr[j] <> '?') and
(UpperCase(PYIndexStr[j]) <>
GetPYIndexChar(hzchar)) then goto NotFound;
end;
if result = '' then result := SourceStrs
else result := result + Char(13) + SourceStrs;
NotFound:
end;
end;
end.
符合我的需求。