CN112486910A - 一种快速解析海量数据文件的方法 - Google Patents
一种快速解析海量数据文件的方法 Download PDFInfo
- Publication number
- CN112486910A CN112486910A CN202011322187.9A CN202011322187A CN112486910A CN 112486910 A CN112486910 A CN 112486910A CN 202011322187 A CN202011322187 A CN 202011322187A CN 112486910 A CN112486910 A CN 112486910A
- Authority
- CN
- China
- Prior art keywords
- data
- reading
- bytes
- original file
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/116—Details of conversion of file system types or formats
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种快速解析海量数据文件的方法,其中,包括:从原始文件里读取预定字节或预定字节整数倍长度的字节数一一对应的转换到程序数组变量里;判断从原始文件读取数据操作是否成功,如果成功则进入下一步;从已读取的数组变量中,读取一个协议包数据;当成功转换到程序数组变量的个数返回值大于0时,将转换后的各数组变量按相关协议进一步处理,生成解析后的文件,之后再次读取下一个协议包数据;在读取新原始文件数据前,把之前剩余的未解析的数据转移到数组变量的开头部分,以便与新读取原始文件数据完成拼接,保证之后的协议包数据顺利被解析,读取新的原始文件数据。
Description
技术领域
本发明涉及软件解析技术,特别涉及一种快速解析海量数据文件的方法。
背景技术
对于一般在PC机平台下解析数据文件的软件运行步骤主要包括:从PC机硬件平台如硬盘文件读取数据,将读取的数据进行格式分析,并转化为某协议规定的格式(一般为可人工直接识别的格式),最后再将解析转化后的格式保存到输出文件里,供后续文件分析用户使用。
由于一般计算机系统下,文件一般记录在块设备中,所谓块设备是I/O设备中的一类,是将信息存储在固定大小的块中,每个块都有自己的地址,还可以在设备的任意位置读取一定长度的数据,例如硬盘,U盘,SD卡等。
那么记录在块设备的文件的读取工作只能按块大小进行操作。以VC++环境下的stdio.h文件fread函数为例,在某次读取数据操作中,如果数据协议规定某包数据长度为100字节,软件在调用fread函数读取100字节后,系统实际是读取块设备里一个块的字节数,一般一个块为512字节或512字节的整数倍数。
这意味着在块设备为基础的环境下,软件执行一次少于一个块长度读数据的时间与执行一次读一个块时间长度相同。而实际情况是一般协议数据包长度往往不会等于一个数据块长度。那么如果按常规思路每次解析一个数据包前用fread函数只读取一个数据包的长度,造成每次系统都会消耗读一个数据块的时间去读取一个数据包长度。如果数据文件本身有几MB字节,多余消耗的时间可忽略;如果是大小超过上GB字节的海量文件,解析整个文件的时间将相当漫长。常规的源码解析软件读数据过程如果操作频繁,将使软件解析进展缓慢,尤其是被解析文件规模海量,达上GB字节时,将会浪费很多时间。
发明内容
本发明的目的在于提供一种快速解析海量数据文件的方法,用于解决上述软件解析进展缓慢的问题。
本发明一种快速解析海量数据文件的方法,其中,包括:从原始文件里读取预定字节或预定字节整数倍长度的字节数一一对应的转换到程序数组变量里;判断从原始文件读取数据操作是否成功,如果不成功则代表文件已到结尾,并结束;如果成功则进入下一步;从已读取的数组变量中,读取一个协议包数据;当成功转换到程序数组变量的个数返回值大于0时,将转换后的各数组变量按相关协议进一步处理,生成解析后的文件,之后再次读取下一个协议包数据;当成功转换数组变量的个数返回值为-1时,证明数组变量已解析到最后几个不能凑满一个协议包的字节数,需要继续从原始文件读取新数据;在读取新原始文件数据前,把之前剩余的未解析的数据转移到数组变量的开头部分,以便与新读取原始文件数据完成拼接,保证之后的协议包数据顺利被解析,读取新的原始文件数据。
根据本发明所述的快速解析海量数据文件的方法的一实施例,其中,还包括,设置数据块缓冲层,每次读取一个数据块,或若干数据块长度,并将数据临时保存在数据块缓冲层。
根据本发明所述的快速解析海量数据文件的方法的一实施例,其中,如果字节数不够一个数据块,则只读剩余字节数,之后将临时保存的数据进一步按协议规定的数据包长度进行解析和翻译。
根据本发明所述的快速解析海量数据文件的方法的一实施例,其中,预定字节为512字节。
根据本发明所述的快速解析海量数据文件的方法的一实施例,其中,整数倍采用2倍4倍。
根据本发明所述的快速解析海量数据文件的方法的一实施例,其中,协议包数据是指在原始文件里保存的格式固定的数据。
根据本发明所述的快速解析海量数据文件的方法的一实施例,其中,读取新的原始文件数据完成之后回到判断从原始文件读取数据操作是否成功的步骤,直到结束。
本发明提出一种快速解析的方法该发明方法可以使软件在读数据过程得以优化,提高解析速度,大大节省软件运行时间。
附图说明
图1为一种快速解析海量数据文件的方法流程图;
图2为block[block_index]数组处理示意图;
图3为转移前后的数值示意图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
为保证每次软件读取数据充分使用,减少底层I/O系统读数据块次数,考虑在软件调用fread函数读取数据块内容基础上,增加一个数据块缓冲层。软件每次不再只读一个数据包长度,而是读取一个数据块,或若干数据块长度,并将数据临时保存。当然要考虑文件实际剩余大小,如果字节数不够一个数据块,则只读剩余字节数。之后将临时保存的数据进一步按协议规定的数据包长度进行解析和翻译。由于临时保存数据在计算机内存里,因此对其进行各项操作所需时间远远小于从块设备读数需要的时间,软件解析文件的速度将得到飞跃性提升。
图1为一种快速解析海量数据文件的方法流程图,如图1所示,一种快速解析海量数据文件的方法包括:
1.程序开始时,从原始文件里读取512字节,或其整数倍长度的字节数到程序内部数组变量里。
补充说明:具体倍数可采用2倍4倍,但倍数太多对总解析时间影响不大。为叙述简便,以下一律以512字节为例进行说明。之所以读取512字节或其倍数,关键在于块设备驱动程序一般是以512字节为倍数进行读硬盘操作的,即程序只读1个字节时,底层驱动程序也是至少读取512字节,读1个字节和读512个字节花费时间相同。因此按此规律进行优化读取文件的方式,是本发明的关键点。接下来的操作主要是保证对程序内部保存的数据进行解析的正确性和连惯性。
2.判断从原始文件读取数据操作是否成功,如果不成功则代表文件已到结尾,程序结束;如果成功则进入下一步。
3.从已读取的块缓冲(数组变量)中,读取一个协议包数据。
补充说明:协议包数据是指在原始文件里保存的格式固定的一行一行数据,它们大致格式如下:
B 0x8c10 OK CMD 1 00:00:39 312110400+133000
B 0x8800 OK STS 1 00:00:39 312134700+24300
B 0x0000 OK DAT 1 00:00:39 312154700+20000
…
因此采用标准C语言函数:
_CRTIMP int__cdecl sscanf(const char*,const char*,...);
以下面方式调用该函数,可将原始文件数据一一对应的转换到程序内部变量里,供后续操作使用。
read_count=sscanf((constchar*)&block[block_index],
"%s%x%s%s%ld%ld:%ld:%ld%ld+%ld\n",
&A,&B,&C,&D,&E,&F,&G,&H,&I,&J);
该函数一共有12个参数,第1个参数block[block_index]数据为第1步的程序内部数组变量,临时保存从原始文件读取的一块512字节数据。block_index为解析到第几个字节的下标变量。第二个参数为格式化字符串,与原始协议包数据的每一行相对应,用于将原始数据顺利读取到后面的10个参数变量A~J里。A~J为程序内部变量,它们装载原始文件数据格式转换后的数据。
以这下面这一行原始协议包数据为例:
B 0x0000 OK DAT 1 00:00:39 312154700+20000
sscanf()函数调用后,后面10个参数取值分别为:A=”B“,B=0x0,C=“OK“,D=”DAT“,E=1,F=0,G=0,H=39,I=312154700,J=20000。read_count为返回值,大于0时,代表sscanf函数成功转换变量的个数,值为-1时,代表转换失败,block数据提供的变量个数不够。
4.图2为block[block_index]数组处理示意图,如图2所示,当read_count返回值大于0时,将转换后的各变量按相关协议进一步处理,生成解析后的文件,之后再次读取下一个协议包数据;当read_count返回值为-1时,证明block[block_index]数组变量已解析到最后几个不能凑满一个协议包的字节数,需要继续从原始文件读取新数据。
5.在读取新原始文件数据前,需要把之前剩余的未解析的数据转移到block[block_index]数组变量的开头部分,以便与新读取原始文件数据完成拼接,保证之后的协议包数据顺利被解析。然后读取新的原始文件数据。
图3为转移前后的数值示意图,如图3所示,完成之后回到第2步,判断从原始文件读取数据操作是否成功,如此循环反复,直到结束。
基于VC++软件开发环境和PC机平台上的软件开发技术,可扩展并推广至其他需要读取海量文件并解析和翻译数据的软件开发环境。
本发明提出一种快速解析的方法该发明方法可以使软件在读数据过程得以优化,提高解析速度,大大节省软件运行时间。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (7)
1.一种快速解析海量数据文件的方法,其特征在于,包括:
从原始文件里读取预定字节或预定字节整数倍长度的字节数一一对应的转换到程序数组变量里;
判断从原始文件读取数据操作是否成功,如果不成功则代表文件已到结尾,并结束;如果成功则进入下一步;
从已读取的数组变量中,读取一个协议包数据;
当成功转换到程序数组变量的个数返回值大于0时,将转换后的各数组变量按相关协议进一步处理,生成解析后的文件,之后再次读取下一个协议包数据;当成功转换数组变量的个数返回值为-1时,证明数组变量已解析到最后几个不能凑满一个协议包的字节数,需要继续从原始文件读取新数据;
在读取新原始文件数据前,把之前剩余的未解析的数据转移到数组变量的开头部分,以便与新读取原始文件数据完成拼接,保证之后的协议包数据顺利被解析,读取新的原始文件数据。
2.如权来要求1所述的快速解析海量数据文件的方法,其特征在于,还包括,设置数据块缓冲层,每次读取一个数据块,或若干数据块长度,并将数据临时保存在数据块缓冲层。
3.如权来要求2所述的快速解析海量数据文件的方法,其特征在于,如果字节数不够一个数据块,则只读剩余字节数,之后将临时保存的数据进一步按协议规定的数据包长度进行解析和翻译。
4.如权来要求1所述的快速解析海量数据文件的方法,其特征在于,预定字节为512字节。
5.如权来要求1所述的快速解析海量数据文件的方法,其特征在于,整数倍采用2倍4倍。
6.如权来要求1所述的快速解析海量数据文件的方法,其特征在于,协议包数据是指在原始文件里保存的格式固定的数据。
7.如权来要求1所述的快速解析海量数据文件的方法,其特征在于,读取新的原始文件数据完成之后回到判断从原始文件读取数据操作是否成功的步骤,直到结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011322187.9A CN112486910A (zh) | 2020-11-23 | 2020-11-23 | 一种快速解析海量数据文件的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011322187.9A CN112486910A (zh) | 2020-11-23 | 2020-11-23 | 一种快速解析海量数据文件的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112486910A true CN112486910A (zh) | 2021-03-12 |
Family
ID=74933028
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011322187.9A Pending CN112486910A (zh) | 2020-11-23 | 2020-11-23 | 一种快速解析海量数据文件的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112486910A (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020042859A1 (en) * | 2000-10-06 | 2002-04-11 | Franciscan University Of Steubenville | Method and system for privatizing computer data |
WO2014090097A1 (zh) * | 2012-12-14 | 2014-06-19 | 腾讯科技(深圳)有限公司 | 一种数据存储方法和装置 |
CN104199625A (zh) * | 2014-09-17 | 2014-12-10 | 贵州京洲电子发展有限公司 | 一种将打印数据转换输出的方法、装置及系统 |
CN108304358A (zh) * | 2017-12-21 | 2018-07-20 | 中国船舶重工集团公司第七0七研究所 | 基于陆用捷联惯导产品SDCard存储装置的数据解析方法 |
CN108833817A (zh) * | 2018-06-27 | 2018-11-16 | 浙江大华技术股份有限公司 | 一种视频数据存储方法及装置 |
CN109739747A (zh) * | 2018-12-13 | 2019-05-10 | 西安现代控制技术研究所 | 一种串行通信信息协议通用解析方法 |
CN111107059A (zh) * | 2019-11-29 | 2020-05-05 | 彩虹无人机科技有限公司 | 一种无人机多协议传输数据解析方法 |
-
2020
- 2020-11-23 CN CN202011322187.9A patent/CN112486910A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020042859A1 (en) * | 2000-10-06 | 2002-04-11 | Franciscan University Of Steubenville | Method and system for privatizing computer data |
WO2014090097A1 (zh) * | 2012-12-14 | 2014-06-19 | 腾讯科技(深圳)有限公司 | 一种数据存储方法和装置 |
CN104199625A (zh) * | 2014-09-17 | 2014-12-10 | 贵州京洲电子发展有限公司 | 一种将打印数据转换输出的方法、装置及系统 |
CN108304358A (zh) * | 2017-12-21 | 2018-07-20 | 中国船舶重工集团公司第七0七研究所 | 基于陆用捷联惯导产品SDCard存储装置的数据解析方法 |
CN108833817A (zh) * | 2018-06-27 | 2018-11-16 | 浙江大华技术股份有限公司 | 一种视频数据存储方法及装置 |
CN109739747A (zh) * | 2018-12-13 | 2019-05-10 | 西安现代控制技术研究所 | 一种串行通信信息协议通用解析方法 |
CN111107059A (zh) * | 2019-11-29 | 2020-05-05 | 彩虹无人机科技有限公司 | 一种无人机多协议传输数据解析方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7664783B2 (en) | File management program, data structure, and file management device | |
CN102004744A (zh) | 从一个源表到至少一个目标库的表的数据抽取系统及方法 | |
JP2002529849A (ja) | データ処理リソースを供給された内蔵システムにおいて実行可能な中間オブジェクトコードプログラムのためのデータ圧縮方法、および、この方法に対応しかつマルチアプリケーションを備えた内蔵システム | |
JP2007535241A (ja) | 条件付で実行可能モジュールを縮小するシステムおよび方法 | |
CN111666114A (zh) | 一种插件式测井数据转换方法 | |
CN112486910A (zh) | 一种快速解析海量数据文件的方法 | |
US5519860A (en) | Central processor index sort followed by direct record sort and write by an intelligent control unit | |
US8463759B2 (en) | Method and system for compressing data | |
CN115686493A (zh) | 一种c语言数据结构代码自动生成接口控制文档的方法 | |
JP5207886B2 (ja) | 文書符号化装置、文書符号化方法 | |
CN111563065B (zh) | 一种文档保存方法、装置及计算机可读存储介质 | |
CN101553800B (zh) | 将主机系统sam/vsam文件转换为开放系统sam/vsam文件的转换装置和方法 | |
CN106775643A (zh) | 一种带有渠道数据的应用文件打包系统及方法 | |
CN109614656B (zh) | 一种用于OpenGL显示列表调用的TLM系统 | |
CN112651214A (zh) | 数据表格明文转换为便于程序可读取的二进制密文的方法 | |
CN112765110A (zh) | 一种pdf批注数据生成方法、装置、设备及存储介质 | |
CN111061528B (zh) | 一种基于32bit数据位的简化编码方法 | |
TWI783465B (zh) | 資料傳輸方法與資料處理電路 | |
CN116595101B (zh) | 数据同步方法、装置、设备及计算机可读存储介质 | |
CN115878851A (zh) | 一种编辑xml文件的方法、装置、电子设备及存储介质 | |
CN111708572B (zh) | 一种基于Clang程序结构的控制流程图自动生成方法 | |
CN117348741B (zh) | 金额输入框的金额显示方法及相关设备 | |
CN116954609A (zh) | 代码转换方法、装置、设备及存储介质 | |
CN115203132B (zh) | 一种用于按需求快速提取op2文件架构的设计方法 | |
CN117931763A (zh) | 嵌入式系统的日志信息生成方法及电子设备、存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210312 |