根据拼音检索数据的方法
编写数据库应用系统有时会用到根据汉字拼音来快速检索数据,网络上有汉字生成拼音的方法:
![](/assets/blank.gif)
![](/assets/blank.gif)
function GetPYIndexChar(hzchar: Ansistring): 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';
$00C800BB..$00C800F5 : 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;
定义一个检索函数:
![](/assets/blank.gif)
![](/assets/blank.gif)
label NotFound;
var
i, j :integer;
hzchar :Ansistring;
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];
hzchar:=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(13) + SourceStrs[i];
NotFound:
end;
end;
然后就可以像这样来使用了:
var
ResultStr:string;
begin
ResultStr:='';
ResultList.Items.Text := SearchByPYIndexStr(Sourcelist.Items, Search.Text);
end;
下面的函数可以将汉字的字符串生成拼音简写(注:适用于D2009/D2010,D7以前版本及D2007需要修改为AnsiString方式,汉字取两个字符):
![](/assets/blank.gif)
![](/assets/blank.gif)
var
i: integer;
c:Char;
begin
i:=1;
result:='';
for i:=1 to length(hzchar) do
begin
c:=GetPYIndexChar(hzchar[i]);
if c='' then
result:=result+hzchar[i]
else
result:=result+c;
end;
end;
然后我们定义一个可以取部分拼音匹配的函数:
![](/assets/blank.gif)
![](/assets/blank.gif)
var
i, j :integer;
hzchar :Ansistring;
s:String;
begin
for i:=0 to SourceStrs.Count-1 do
begin
s:=GetPY(SourceStrs[i]);
if Pos(UpperCase(PYIndexStr),UpperCase(s))>0 then
result := result + Char(13) + SourceStrs[i];
end;
end;
一个自动生成过滤参数的函数:
![](/assets/blank.gif)
![](/assets/blank.gif)
var
ResultStr,ss:string;
s:TStrings;
begin
ResultStr:='';
try
s:=TStringList.Create;
s.Text:= SearchByPYIndexStrPart(SourceStrs, PYIndexStr);
Result:='';
for ss in s do
begin
if ss<>'' then
Result:=Result+FieldName+' like ''%'+ss+'%'' or ';
end;
Result:=Copy(Result,1,Length(Result)-3);
Exit(Result);
finally
s.Free;
end;
end;
然后我们就可以像这样来使我们的数据支持动态的汉字拼音快速检索了:
![](/assets/blank.gif)
![](/assets/blank.gif)
//FieldValueListStrings:TStrings类型的数据值列表
//PYIndex:拼音索引字符串
//FieldName:筛选用的字段名称
/注意要设置aDataSet.Filtered:=True;
aDataSet.Filter:=GetDataSetFilter(FieldValueListStrings,PYIndex,FieldName);
这样我们定义好通用函数,就可以在程序的任何地方方便地使用汉字检索了.
注意:如果待查询数据比较到的话,这种方式效率很低,建议最好在数据表中建立一个拼音字段,在保存数据时自动生成,然后就可以根据拼音字段进行快速筛选了.
根据拼音检索数据的方法相关推荐
- 向线程传递数据与线程用回调方法检索数据
用回调方法检索数据 /**//*用回调方法检索数据 下面的示例演示了一个从线程中检索数据的回调方法.包含数据和线程方法的类的构造函数也接受代表回调方法的委托: 在线程方法结束前,它调用该回调委托. * ...
- 拼音检索VS五笔检索---Javascript实现
前段时间在研究用js 实现拼音首字母以及五笔首字符的检索,呵呵,终于实现了.找了好多资料.方法也是多样的.就是检索的内容多了.循环的次数多,导致检索有点慢,也有可能我写的js也不是特别的精炼,但是不管 ...
- 调用实现天气预报功能android,Android编程实现获取新浪天气预报数据的方法
本文实例讲述了Android编程实现获取新浪天气预报数据的方法.分享给大家供大家参考,具体如下: 新浪天气预报地址: http://php.weather.sina.com.cn/xml.php?ci ...
- html webservice数据交互_一种基于WebService的数据交换方法
一种基于WebService的数据交换方法 [专利摘要]本发明涉及数据交换[技术领域],特别涉及一种基于WebService的数据交换方法.本发明是以Web服务为依托,通过定义参数的方式进行传入内容和 ...
- 最新综述:用于文本分类的数据增强方法
©PaperWeekly 原创 · 作者 | 王馨月 学校 | 四川大学本科生 研究方向 | 自然语言处理 概要 数据增强,即通过转换为机器学习人工创建训练数据,是跨机器学习学科广泛研究的研究领域.它 ...
- SQL 100+个最佳入门案例实践(覆盖Oralce、SQL Server、Mysql)之基础操作_1_检索数据
SQL基础操作_1_检索数据 目录 7.1.1 数据集 7.1.2 学生选课关系表 7.1.3 供应商关系表 7.2.1 从表中查询所有行和列 7.2.2 从表中查询部分行 7.2.3 查询满足某个条 ...
- OLEDB Excel 与C# 的数据流通方法
一. 名词解释: OleDbCommand 是对数据源执行各种操作的SQL语句或者存储过程,连接access.excel等数据文件进行数据操作时候用到的,其实和sqlcomma ...
- nlp5-n-gram/语言模型(数据平滑方法
文章目录 1.句子的先验概率 1.1 n-gram 2. 参数估计 3. 数据平滑 3.1 数据平滑度方法 3.1.1加1法 3.1.2减 1.句子的先验概率 这个联合概率太小了 窗口越大,共现的可能 ...
- 4-2 ADO.NET-查询和检索数据13
//==========动态程序设计部分================ using System; using System.Collections.Generic; using System.Co ...
最新文章
- struts2 理解
- spring boot配置文件详解
- 启动Kafka失败Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 107
- 一次网站性能排查的经历
- TCP/IP、Http的区别
- 移除项目中的CocoaPods
- 《LeetBook》leetcode题解(5):Longest Palindromic [M]——回文串判断
- 测绘工程所用软件评析
- Android 4 开发环境配置中的诸多陷阱
- Android XML中引用自定义内部类view的四个why
- virtualbox安装增强功能时【未能加载虚拟光盘】
- win10字体模糊发虚怎么回事?win10字体模糊发虚电脑问题还是系统问题?
- 《刺杀骑士团长》读后感
- 判断输入的字符与已知字符相等_你会输入带圈字符吗?
- java8.0安装教程_图解JDK8下载安装以及环境配置全过程,超级详细
- 华为手机序列号前三位_华为所有型号交换机查看序列号方法
- win10java编辑器_5个最好的Windows 10的字幕编辑软件
- 城通网盘仿蓝奏网盘源码
- word有空白段删不掉 解决办法
- 如何调整网站竞价关键词