一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种文件输入输出流高效通用化算法库实现方法

2022-05-26 21:08:58 来源:中国专利 TAG:
1.本发明涉及算法库
技术领域
:,具体为一种文件输入输出流高效通用化算法库实现方法。
背景技术
::2.对于c 开发者而言,文件输入输出一直是一个较难掌握的内容,直接采用系统内置的输入输出流进行文件读写,常常会遇到各种各样意想不到的问题,提高了软件系统的开发门槛,同时也降低了系统开发效率和运行效率。对于程序人员,常常会遇到如下与文件输入输出流有关的问题。3.现有的算法库存在的缺陷是:4.1、专利文件cn111738452a公开了一种电力领域的人工智能算法库引擎的实现方法,“包括:数据预处理模块,针对电网数据进行各种预处理;智能算法训练模块,利用预处理好的数据选择相关算法进行训练;电力智能算法模块,已训练好的算法模型,提供智能服务。本发明将电网领域知识与人工智能算法相结合,可提供一整套电力领域的人工智能算法库解决方案”;5.2、专利文件cn103795548a公开了一种基于群签名算法的分布式数据库系统及其实现方法,“方法包括步骤:采用群签名算法对分布式数据库系统进行保护,所述群签名算法中输入一个安全参数,输出群公钥和群私钥;采用密钥分存算法将子密钥分配给分布式数据库系统的不同数据库成员,及通过不同数据库成员的子密钥恢复群私钥。本发明将群签名算法应用在分布式数据库系统中,增强了整个系统的安全性、有效性、数据的可追踪性和数据的真实性,保证了各数据库成员的安全,整个数据库系统的完整,提高了数据库通讯的安全性和透明度;并且采用密钥分存算法分配子密钥及恢复群私钥,更进一步提高了系统的安全性”;6.3、专利文件cn108153916a公开了一种利用随机算法实现数据库sql查询语句自动生成工具的方法,“包括s1、从query总生成模块进行查询语句生成;s2、执行select生成模块,利用随机算法随机选取,若选取select子查询单元,从s1开始重新生成,若选取funcall单元,进入s3;s3、执行from生成模块,利用随机算法随机选取,若选取from子查询单元,从s1开始重新生成,若选取joined_table单元,进入s4;s4、执行condition生成模块,利用随机算法随机选取,若选取condition子查询单元,从s1开始重新生成,若选取bool_term单元,进入s5;s5、将所有的查询语句嵌套拼接成一条完整的sql查询语句并输出。本发明可实现多层嵌套式sql查询语句自动生成,可提高复杂sql制造效率”,综上所述现有的构建方法存在以下缺陷,由于文件操作是通过系统i/o进行的,由于读取文件过程的不确定性,常常会遇到不可预料的问题,如文件指示错误、打开错误、读取数据格式错误等。这些错误的出现存在随机性,在读取的过程中,需要反复进行判断和试错,极易出现程序漏洞和遗漏问题,文件输入输出流通常有二进制流和文本流两种,而这两种文件的处理方式完全不同,在使用过程中需要分开处理,没有统一的处理方式,且文本流文件数据格式多样,对文件的处理方式要求各不相同,通常情况下,程序员在进行文件输入的时候,希望所有数据按特定的格式存放。但是实际情况下,可能会出现格式各样的文件格式问题,尤其是文本格式文件输入,有时会因为一个字符或者换行符,造成整个输入过程的困难,读取错误是很多程序出现不稳定、甚至崩溃的主要原因,究其原因,主要是程序员没有充分考虑到读取文件过程中可能出现的所有问题,并进行精确定位,甚至有些读取错误会存在滞后性,较为隐蔽,很难发现和定位,鉴于c 输入输出流在使用过程中存在的问题,本发明以常见格式化输入文件读取算法为基础,通过统一算法接口、规范基类处理函数、个性化实体类定制、独立预处理机制、精确化错误处理机制等方式,最大限度提高了算法的规范性、多样性和效率,是一种高效且稳定的输入输出流处理算法库。技术实现要素:7.本发明的目的在于提供一种文件输入输出流高效通用化算法库实现方法,以解决上述
背景技术
:中提出的问题。8.为实现上述目的,本发明提供如下技术方案:一种文件输入输出流高效通用化算法库实现方法,包括统一算法接口、规范基类处理函数、个性化实体类定制、独立预处理机制和精确化错误处理机制,所述该算法库根据c 文件输入输出算法的特点,编制了专门的基类,并在此基类基础上,编制了统一输入接口;9.(1)hobjectbase类10.hobjectbase类借鉴mfc基类创建模式,统一了所有类的基类和基础接口,实现了类的统一化和规范化,支持动态创建类对象和自动类型识别等功能。11.(2)hfilestreambase类12.hfilestreambase类定义了输入输出问题所共有的成员变量和相关函数,主要包括文件信息和错误信息记录。13.(3)himportstream类14.himportstream类为输入流的基类,该类主要是包装了c 的文件输入流,由于二进制输入流类和文本输入流类之间的不同之处,具体的读取操作放在himportbinary类和himporttext类中。15.(4)hexportstream类16.hexportstream类为输出流的基类,该类主要是包装了c 的文件输出流,由于二进制输出流类和文本输出流类之间的不同之处,具体的写入操作放在hexportbinary类和hexporttext类中。17.优选的,所述考虑到输出类操作一般不会出现交互错误,该算法倾向于简化输出流类操作的包装,尽量保持开放,该部分主要描述规范输入类处理函数;18.(1)二进制类文件读取19.由于二进制类数据的读取一般不存在格式问题,且由于数据的二进制属性,决定了其格式较严格,故主要提供三类读取操作。20.读取任意类型数据,可读取任意基本类型和结构体,但不支持含指针的数据读取21.template《typenamet》boolreaddata(t&data);22.读取任意长度的空数据,用于跳过无效数据size_tcount,constsize_twidth,conststd::string&targetname="value");54.按顺序读取指定数量的二维size_t类型数据,并放入vector中55.boolreaddatasplit(std::vector《std::vector《size_t》》&valuelist,constsize_tcount,constsize_twidth,constsize_toffset=0,conststd::string&targetname="value");56.按顺序读取指定数量的二维bool类型数据,并放入vector中57.boolreaddatasplit(std::vector《std::vector《bool》》&valuelist,constsize_tcount,constsize_twidth,conststd::string&targetname="value");58.按顺序读取指定数量的二维double类型数据,每行第一个数为size_t类型的编号,并放入vector中59.boolreaddatasplit(std::vector《size_t》&indexlist,std::vector《std::vector《double》》&valuelist,constsize_tcount,constsize_twidth,constsize_toffset=0,conststd::string&targetname="value");60.按顺序读取指定数量的二维bool类型数据,每行第一个数为size_t类型的编号,并放入vector中61.boolreaddatasplit(std::vector《size_t》&indexlist,std::vector《std::vector《bool》》&valuelist,constsize_tcount,constsize_twidth,constsize_toffset=0,conststd::string&targetname="value");62.③数据类型转换63.将已读入的数据块中第index个数据转换成string类型64.std::stringgetstr(constsize_tindex)const;65.将已读入的数据块中第index个数据转换成bool类型66.boolgetbool(constsize_tindex)const;67.将已读入的数据块中第index个数据转换成size_t类型68.size_tgetsizet(constsize_tindex)const;69.将已读入的数据块中第index个数据转换成int类型70.intgetint(constsize_tindex)const;71.将已读入的数据块中第index个数据转换成word类型72.wordgetword(constsize_tindex)const;73.将已读入的数据块中第index个以16进制表示的数据转换成int类型74.intgethexint(constsize_tindex)const;75.将已读入的数据块中第index个以16进制表示的数据转换成word类型76.wordgethexword(constsize_tindex)const;77.将已读入的数据块中第index个数据转换成double类型78.doublegetdouble(constsize_tindex)const;79.将已读入的数据块中第index个数据转换成float类型80.floatgetfloat(constsize_tindex)const;81.④辅助功能82.判断当前行是否由特定字符串开头,用以进行格式判断83.boolstartwith(conststd::stringstr)const;84.判断当前行是否由特定字符开头,用以进行格式判断85.boolstartwith(constcharch)const;。86.优选的,所述在格式化基类的基础上,即可进行个性化实体类的定制,算法库给出了一个常见的通用实体类,用户也可根据自身需求,开发相对复杂的实体类;算法库提供的通用个性化实体类如下:87.(1)himportbinaryblock:himportbinary的实体类,读取由多个固定大小的block组成的数据文件;88.(2)himportstructlist:himportbinary的实体类,读取由多个相同struct组成的数据文件;89.(3)himporttextsetting:himporttext的实体类,读取配置文件;90.(4)himporttexttable:himporttext的实体类,读取文本格式表格;91.(5)himporttextint:himporttext的实体类,读取由整数组成的文件;92.(6)himporttextdouble:himporttext的实体类,读取由浮点数组成的文件。93.优选的,所述对于不同的实体类,由于算法本身的不同特性,有些算法在计算之前需要进行预处理。算法库将实体类的通用预处理工作独立出来,实体类仅需设定文件名,并调用importfile函数即可。94.(1)自动文件名文法分析:基于不同操作系统对于文件路径的定义不同,进行相应的预处理;95.(2)自动文件名解析:将文件名中的路径、名称、文件类型自动分开;96.(3)自动反馈机制:读取文件过程中出现错误,自动返回,并报告错误,避免系统崩溃;97.(4)自动文件i/o机制:算法库基类自动实现,用户无需关心i/o问题;98.(5)自动数据分割:读取文件过程中,基类自动将数据按照设定的分隔符进行分割,方便后续处理。99.优选的,所述输入输出流通用算法库的一个核心功能是自动实现精确化错误定位及处理,用户无需关心i/o问题,仅需关注读取文件处理函数的返回值类型是否为true,即可实现格式类错误的自动提示和定位,逻辑类错误需实体类开发者自主判断并给出提示,定位自动实现;100.算法库给出了定义错误的结构体[0101][0102][0103]在该结构体中,msg变量提供了错误信息,由算法类自动给出或有实体类开发者指定,line变量提供了错误所在行(对于二进制类型文件,为当前位置),在读取或者写入过程中,若返回false,系统会给出错误信息和错误所在位置的信息,便于用户调试或修改文件。[0104]与现有技术相比,本发明的有益效果是:[0105]1.本发明算法库设置了四级基类和一级实体类。一级基类为统一基类,可实现动态类型识别,弥补普通c 类在数据类型识别上的不足;二级基类为输入输出流基类,仅给出文件名和错误处理信息成员变量;三级基类区分输入和输出,处理文件打开关闭等i/o工作;四级基类区分二进制流和文本流,处理基本数据读写和部分批处理功能;实体类实现特定类型文件的读写,为用户友好类;[0106]2.本发明由于文件处理存在不确定性,尤其是文本文件读取过程中,容易出现各类预料外问题,基于本算法库的实体类仅需关注数据本身,无需处理读写错误,可大大减少未知错误的发生;[0107]3.本发明基于该算法库的实体类仅需重载importfile(或exportfile)函数,并在该函数中实现将读取(或写入)的数据与变量或数据结构一一对应,即可完成实体类的开发工作;[0108]4.本发明算法库提供了大量数据批处理函数,能适应大多数数据密集型文件的读取,在实体类开发过程中,充分利用这些批处理函数,可大大降低开发难度,提高运行效率;[0109]5.本发明算法库大多数函数都提供了读写参数和默认值,由于用户需求和文件特点不同,对格式的要求也很多样,有时候会比较随意,充分利用文件处理参数,可提高算法的适用性,同时默认参数也降低了使用者的门槛;[0110]6.本发明该算法库以c 17为编程语言,支持拉格朗日插值、牛顿插值和三次样条插值算法,并在vs2019和qt5.14上编译通过。附图说明[0111]图1为本发明的框架图;[0112]图2为本发明的四级基类关系结构图。具体实施方式[0113]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0114]在本发明的描述中,需要说明的是,术语“上”、“下”、“内”、“外”“前端”、“后端”、“两端”、“一端”、“另一端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。[0115]在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“设置有”、“连接”等,应做广义理解,例如“连接”,可以是固定连接,也可以是可拆卸连接,或一体的连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上offset=0,conststd::string&targetname="value");[0168]按顺序读取指定数量的二维bool类型数据,每行第一个数为size_t类型的编号,并放入vector中[0169]boolreaddatasplit(std::vector《size_t》&indexlist,std::vector《std::vector《bool》》&valuelist,constsize_tcount,constsize_twidth,constsize_toffset=0,conststd::string&targetname="value");[0170]③数据类型转换[0171]将已读入的数据块中第index个数据转换成string类型[0172]std::stringgetstr(constsize_tindex)const;[0173]将已读入的数据块中第index个数据转换成bool类型[0174]boolgetbool(constsize_tindex)const;[0175]将已读入的数据块中第index个数据转换成size_t类型[0176]size_tgetsizet(constsize_tindex)const;[0177]将已读入的数据块中第index个数据转换成int类型[0178]intgetint(constsize_tindex)const;[0179]将已读入的数据块中第index个数据转换成word类型[0180]wordgetword(constsize_tindex)const;[0181]将已读入的数据块中第index个以16进制表示的数据转换成int类型[0182]intgethexint(constsize_tindex)const;[0183]将已读入的数据块中第index个以16进制表示的数据转换成word类型[0184]wordgethexword(constsize_tindex)const;[0185]将已读入的数据块中第index个数据转换成double类型[0186]doublegetdouble(constsize_tindex)const;[0187]将已读入的数据块中第index个数据转换成float类型[0188]floatgetfloat(constsize_tindex)const;[0189]④辅助功能[0190]判断当前行是否由特定字符串开头,用以进行格式判断[0191]boolstartwith(conststd::stringstr)const;[0192]判断当前行是否由特定字符开头,用以进行格式判断[0193]boolstartwith(constcharch)const;。[0194]进一步,所述在格式化基类的基础上,即可进行个性化实体类的定制,算法库给出了一个常见的通用实体类,用户也可根据自身需求,开发相对复杂的实体类;算法库提供的通用个性化实体类如下:[0195](1)himportbinaryblock:himportbinary的实体类,读取由多个固定大小的block组成的数据文件;[0196](2)himportstructlist:himportbinary的实体类,读取由多个相同struct组成的数据文件;[0197](3)himporttextsetting:himporttext的实体类,读取配置文件;[0198](4)himporttexttable:himporttext的实体类,读取文本格式表格;[0199](5)himporttextint:himporttext的实体类,读取由整数组成的文件;[0200](6)himporttextdouble:himporttext的实体类,读取由浮点数组成的文件。[0201]进一步,所述对于不同的实体类,由于算法本身的不同特性,有些算法在计算之前需要进行预处理。算法库将实体类的通用预处理工作独立出来,实体类仅需设定文件名,并调用importfile函数即可;[0202](1)自动文件名文法分析:基于不同操作系统对于文件路径的定义不同,进行相应的预处理;[0203](2)自动文件名解析:将文件名中的路径、名称、文件类型自动分开;[0204](3)自动反馈机制:读取文件过程中出现错误,自动返回,并报告错误,避免系统崩溃;[0205](4)自动文件i/o机制:算法库基类自动实现,用户无需关心i/o问题;[0206](5)自动数据分割:读取文件过程中,基类自动将数据按照设定的分隔符进行分割,方便后续处理。[0207]优选的,所述输入输出流通用算法库的一个核心功能是自动实现精确化错误定位及处理,用户无需关心i/o问题,仅需关注读取文件处理函数的返回值类型是否为true,即可实现格式类错误的自动提示和定位,逻辑类错误需实体类开发者自主判断并给出提示,定位自动实现;[0208]算法库给出了定义错误的结构体[0209][0210]在该结构体中,msg变量提供了错误信息,由算法类自动给出或有实体类开发者指定,line变量提供了错误所在行(对于二进制类型文件,为当前位置),在读取或者写入过程中,若返回false,系统会给出错误信息和错误所在位置的信息,便于用户调试或修改文件。[0211]对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献