一种子串查找方法及装置的制造方法_2

文档序号:8430877阅读:来源:国知局
所分离。
[0057]在本实施例中,第二长度范围可以根据子串的长度来设定,即,第二长度必须不小于子串的长度。比如,子串“我们”的长度为2ΚΒ,那么需要设定第二长度范围不小于2ΚΒ,例如,如图3所示的5ΚΒ。
[0058]在本发明一优选实施例中,可以在分割位置之前的5ΚΒ区域内查找行分隔符,也可以在分割位置之后的5ΚΒ区域内查找行分隔符。
[0059]步骤206:将该分隔位置调整为分隔符所在的位置,以对两个预备数据块的大小进行调整,得到调整后的两个实际数据块,执行步骤208。
[0060]由于子串不可能位于行分隔符之间,因此,如果在分割位置的第二长度范围的区域内查找到行分隔符,则将该分割位置调整为行分隔符所在的位置,从而得到了如图3所示的实际数据块2。
[0061]步骤207:不对分割位置进行调整,继续执行步骤208。
[0062]步骤208:在每一个实际数据块中查找目标子串。
[0063]在本实施例中,每一次与CPU交互,进行1访问,可以从文件η的文件头到文件尾的顺序依次获取一个实际数据块。
[0064]由于现有技术方案是每获取一行数据均需要在获取的该行数据查找完成子串之后,才能继续获取下一行数据,因此,在本发明一优选实施例中,可以使用两类线程分别完成实际数据块的获取和查找。例如,使用两个线程,其中一个线程用于逐次获取一个实际数据块,另一个线程用于在获取的实际数据块查找子串,从而无需等待查找子串的过程即可去获取下一个的实际数据块,从而提高了子串查找效率。
[0065]如图4所示,为本实施例读数据块和写数据块的示意图。其中,通过访问1Thread将数据块写入内存(Buffer I和Buffer 2)中,CPU Thread用于从内存中读取数据块。
[0066]步骤209:记录文件η中查找到的子串的数量,以及所查找到的每一个子串在文件η中的位置。
[0067]由于现有技术方案中在查找到一个子串之后,即结束子串查找的过程,因此,本实施例可以在文件η中查找子串的过程中,记录所查找到的子串的数量以及每一个子串在文件η中的位置,从而方便了对每一个子串的查找。
[0068]如图5、图6所示,本发明实施例提供了一种子串查找装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图5所示,为本发明实施例子串查找装置所在设备的一种硬件结构图,除了图5所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图6所示,作为一个逻辑意义上的装置,是通过其所在设备的CPU将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的子串查找装置60包括:
[0069]存储单元601,用于根据目标文件中长度最大的行数据设定第一长度;
[0070]确定单元602,用于确定待查找的目标子串;
[0071]分割单元603,用于根据设定的第一长度,将目标文件分割成多个预备数据块;
[0072]调整单元604,用于根据行分隔符,调整多个预备数据块的大小,得到调整后的多个实际数据块;
[0073]查找单元605,用于在每一个实际数据块中查找目标子串。
[0074]进一步地,调整单元604,用于对于每相邻的两个预备数据块,确定分隔该两个预备数据块的分隔位置,在该分隔位置之前或之后的预设第二长度范围内查找行分隔符,如果查找到,则将该分隔位置调整为分隔符所在的位置,以对两个预备数据块的大小进行调整,得到调整后的两个实际数据块。
[0075]在本发明一个优选实施例中,如图7所示,子串查找装置还可以进一步包括:
[0076]获取单元701,用于利用第一线程执行获取每一个实际数据块,利用第二线程执行在每一个实际数据块中查找目标子串。
[0077]进一步包括:
[0078]记录单元702,用于记录在目标文件的每一个实际数据块中查找到的目标子串的数量,以及所查找到的每一个目标子串在目标文件中的位置。
[0079]如上,本发明实施例至少可以实现如下有益效果:
[0080]1、通过设定数据块的长度,在获取目标文件时,可以每次获取一个数据块,其中,由于在每次获取数据块时可以根据设定数据块的长度进行获取,该长度可以设定为大于目标文件中长度最大的行数据的长度,从而提高了每次获取数据的长度,进而提高了子串查找效率。
[0081]2、为了保证数据块在分割时,目标子串不分别位于相邻的两个预备数据块中,可以对预备数据块的大小进行调整,从而得到实际数据块,从而保证了分割数据块时目标子串不分别位于相邻的两个数据块中,从而提高了子串查找的准确性。
[0082]3、通过使用两类线程实现对数据块获取与子串查找的分离,无需等待线程进行子串查找结束即可继续获取下一个数据块,从而提高了子串查找的效率。
[0083]4、在对文件查找子串完全结束后,可以记录文件中所包括子串的数量以及每一个子串在文件中的起始位置,从而使得用户方便的对各个子串进行查看。
[0084]上述设备内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
[0085]需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同因素。
[0086]本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
[0087]最后需要说明的是:以上仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
【主权项】
1.一种子串查找方法,其特征在于,根据目标文件中长度最大的行数据设定第一长度,还包括: 确定待查找的目标子串; 根据设定的所述第一长度,将所述目标文件分割成多个预备数据块; 根据行分隔符,调整所述多个预备数据块的大小,得到调整后的多个实际数据块; 在每一个实际数据块中查找所述目标子串。
2.根据权利要求1所述的方法,其特征在于, 所述根据行分隔符调整所述多个预备数据块的大小包括:对于每相邻的两个预备数据块,确定分隔该两个预备数据块的分隔位置,在该分隔位置之前或之后的预设第二长度范围内查找所述行分隔符,如果查找到,则将该分隔位置调整为所述分隔符所在的位置,以对所述两个预备数据块的大小进行调整,得到调整后的两个实际数据块。
3.根据权利要求1所述的方法,其特征在于,进一步包括: 利用第一线程执行所述获取每一个实际数据块,利用第二线程执行所述在每一个实际数据块中查找所述目标子串。
4.根据权利要求1至3中任一所述的方法,其特征在于,所述在每一个实际数据块中查找所述目标子串之后,进一步包括: 记录在所述目标文件的每一个实际数据块中查找到的所述目标子串的数量,以及所查找到的每一个所述目标子串在所述目标文件中的位置。
5.一种子串查找装置,其特征在于,包括: 存储单元,用于根据目标文件中长度最大的行数据设定第一长度; 确定单元,用于确定待查找的目标子串; 分割单元,用于根据设定的所述第一长度,将所述目标文件分割成多个预备数据块; 调整单元,用于根据行分隔符,调整所述多个预备数据块的大小,得到调整后的多个实际数据块; 查找单元,用于在每一个实际数据块中查找所述目标子串。
6.根据权利要求5所述的装置,其特征在于,所述调整单元,用于对于每相邻的两个预备数据块,确定分隔该两个预备数据块的分隔位置,在该分隔位置之前或之后的预设第二长度范围内查找所述行分隔符,如果查找到,则将该分隔位置调整为所述分隔符所在的位置,以对所述两个预备数据块的大小进行调整,得到调整后的两个实际数据块。
7.根据权利要求5所述的装置,其特征在于,进一步包括: 获取单元,用于利用第一线程执行所述获取每一个实际数据块,利用第二线程执行所述在每一个实际数据块中查找所述目标子串。
8.根据权利要求5至7中任一所述的装置,其特征在于,进一步包括: 记录单元,用于记录在所述目标文件的每一个实际数据块中查找到的所述目标子串的数量,以及所查找到的每一个所述目标子串在所述目标文件中的位置。
【专利摘要】本发明提供一种子串查找方法及装置,方法包括:一种子串查找方法,根据目标文件中长度最大的行数据设定第一长度,还包括:确定待查找的目标子串;根据设定的第一长度,将目标文件分割成多个预备数据块;根据行分隔符,调整多个预备数据块的大小,得到调整后的多个实际数据块;在每一个实际数据块中查找目标子串。根据本方案,从而提高了子串查找效率。
【IPC分类】G06F17-30
【公开号】CN104750846
【申请号】CN201510167439
【发明人】周正德, 徐正礼
【申请人】浪潮集团有限公司
【公开日】2015年7月1日
【申请日】2015年4月10日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1