function TForm1.GetPYIndexChar(hzchar: string): char;
begin
showMessage(IntToStr(integer(WORD(hzchar[1]))));
showMessage(IntToStr(integer(WORD(hzchar[1]))shl 8));
showMessage(IntToStr(integer(WORD(hzchar[2]))));
showMessage(IntToStr(integer(WORD(hzchar[1]) shl 8 + WORD(hzchar[2]))));
showMessage('Over');
// ShowMessage(char(WORD(hzchar[1])));
//ShowMessage(char(WORD(hzchar[1]) shl 8 + WORD(hzchar[2])));
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 TForm1.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[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;
1,在以上代码中我有一句话不明白,希望指点:
hzchar:=SourceStrs[i][2*j-1] + SourceStrs[i][2*j];
直接提取第一个字符不行么,为什么非要这样做?
这样做的原理是什么?
2,还能哪位高手能解释下汉字内码是什么东西,拼音向汉字内码转换然后再转化成汉字是什么样的过程。
不盛感激!!
begin
showMessage(IntToStr(integer(WORD(hzchar[1]))));
showMessage(IntToStr(integer(WORD(hzchar[1]))shl 8));
showMessage(IntToStr(integer(WORD(hzchar[2]))));
showMessage(IntToStr(integer(WORD(hzchar[1]) shl 8 + WORD(hzchar[2]))));
showMessage('Over');
// ShowMessage(char(WORD(hzchar[1])));
//ShowMessage(char(WORD(hzchar[1]) shl 8 + WORD(hzchar[2])));
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 TForm1.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[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;
1,在以上代码中我有一句话不明白,希望指点:
hzchar:=SourceStrs[i][2*j-1] + SourceStrs[i][2*j];
直接提取第一个字符不行么,为什么非要这样做?
这样做的原理是什么?
2,还能哪位高手能解释下汉字内码是什么东西,拼音向汉字内码转换然后再转化成汉字是什么样的过程。
不盛感激!!
解决方案 »
- delphi2009中怎么在事件中传递泛型参数
- 帮我改下这句SQL语句
- CopyDirectory() 文件复制问题
- 崩溃边缘——紧急求助,Dbgrid问题
- Borland的程序员,还得Turbo Pascal、TC20、BC++吗,真正的程序员,怎能不读《Borland传奇》一书,太好了!
- 简单---在线等待
- 谁能介绍有关DELPHI属性、事件、方法的书籍???
- 高分问Inno Setup两个问题:
- 为什么我用spcomm控件编了一串口程序能发不能收....ReceiveData事件为什么没触发请前辈指教....
- 为什么统计总是少统计一天?总是少统计月末的一天。
- 一个关于 Active Directory 的问题!
- 一个散分的问题,请各位指点
SourceStrs是TStrings类型,含多列每列为SourceStrs[i]
由于汉字占两个字节,如:字符->“汉”,为SourceStrs[i][0]+SourceStrs[i][1]
2.
在汉字内码中,汉字是按拼音顺序排列的
如汉字拼音首字母为"A"的汉字内码为$B0A1..$B0C4