将csv格式数据转换为SEG-2格式数据的方法及装置与流程

文档序号:19674299发布日期:2020-01-10 23:05阅读:732来源:国知局
将csv格式数据转换为SEG-2格式数据的方法及装置与流程

本发明属于工程勘探、检测领域,尤其应用于将地质勘探采集到的弹性波数据解析转换为seg(thesocietyofexplorationgeophysicists)工程地球会议规定的一种统一的数据文件存储格式,即seg-2格式。



背景技术:

随着工程物探的迅速发展,浅层地震、地质雷达方法被广泛应用于工程与环境问题的勘察中。这也使得浅层物探方法及其仪器的研制进入了一个崭新的时代。由于各仪器生产厂家对数据的记录都有自己特定的存储格式和其相应的软件包,为此seg(thesocietyofexplorationgeophysicists)工程地球物理会议规定了一种统一的数据文件存储格式,即seg-2格式。seg建议自1987年10月之后生产的浅层地震仪、地质雷达的数据存储格式均采用seg-2标准,若厂家不采用seg-2存储格式,就必须提供能将其数据转换成seg-2格式的相应软件。

csv格式作为一种常用的保存采集数据的格式,其特点是数据按字符串形式存储并且数据与数据之间用逗号分隔,通常csv文件的每一行对应记录了一个采集通道在一次弹性波采集过程中的所有信息,可分类为:工程信息、通道信息和采集数据,其格式如图1所示。而seg-2数据文件的格式如图2所示,它由一个文件描述块,一个或多个道描述块及相应的数据块组成,其中文件描述块如图3所示,道描述块如图4所示。将csv格式数据转换为seg-2格式的常规做法是:首先根据csv文件的逗号分隔进行数据提取,按从头到尾的顺序对数据逐个进行归类并记录数据所占的字节数,最后按照seg-2格式要求统计出相应的内容填写seg-2文件。但是这种解析转换方式使得很多信息重复提取解析,导致解析效率低,解析逻辑复杂,而且勘探技术的提高导致一个工作面的采集数据量变大,对数据文件进行逐个解析和转换,占用的内存变大。



技术实现要素:

本发明要解决的技术问题是:为克服采集数据逐个解析存储为seg-2格式时存在的解析效率低下,占用内存大且解析逻辑复杂等问题,本发明提供了一种基于采集数据行解析的地震seg-2格式存储方法,该方法可以通过按行解析的框架解析采集所得的数据文件并转换存储为seg-2格式。

本发明的技术方案是:

1.转换方法:按行读取csv文件,对每一行进行如下操作:单个提取出通道信息数据,并按照seg-2规定的字符串格式:数字(表示该字符串长度,占2字节)+关键词+空格或制表符(tabs)+单个通道信息数据+'\0'(字符串结束符)转换成字符串,记录每一个通道信息数据字符串所占字节数。累加每一个通道信息数据字符串字节数,再加2(在所有字符串的最后是一个为0的整数,占2字节),得到该行通道信息数据字符串总字节数。另外,记录该行通道信息数据中采集数据长度信息。

2.因为csv文件每一行的工程信息数据均相同,为提高解析效率减少重复解析,只在读取到最后一行时进行如下操作:单个提取出工程信息数据,并按照seg-2规定的字符串格式:数字(表示该字符串长度,占2字节)+关键词+空格或制表符(tabs)+单个工程信息数据+'\0'(字符串结束符)转换成字符串,记录每一个工程信息数据字符串所占字节数。累加每一个工程信息数据字符串字节数,再加2(在所有字符串的最后是一个为0的整数,占2字节),得到工程信息数据字符串总字节数。

3.csv文件最后一行读取完成后,记录该csv文件总行数。

4.创建seg-2文件,开始写入“文件描述块”:

1)具体的计算方法为:道数n=csv文件总行数,道指针子块大小=csv文件行数*4,而版本号、字符串结束符大小、字符串结束符、行结束符大小、行结束符可按seg-2格式自行确定。

2)获得各个道描述块指针的方法如下:

a)计算文件描述块大小——基指针,基指针=32+道指针子块大小+工程信息数据字符串总字节数。基指针为第1道描述块指针。

b)第i(n≥i>1)道描述块指针=第i-1道描述块指针+32+第i-1行通道信息数据字符串总字节数+第i-1行采集数据长度*h(h的数值由数据形式确定)。

3)将每一个工程信息数据字符串按字母顺序排列,依次写入seg-2文件,最后写入一个为0的整数作为所有字符串结束标志,占2字节。

5.开始写入“描述块”+“数据块”。由于一次加载所有csv文件中的采集数据会占用大量内存,本发明采用读取一行写入一行的方法:

1)首先写入第i(i=1,2…n)道描述块。具体的计算方法为:道描述块大小=32+第i行通道信息数据字符串总字节数,相应数据块大小=第i行采集数据长度*h(h的数值由数据形式确定),数据块中采样点数=第i行采集数据长度,数据格式代码由数据形式确定。

2)将每一个通道信息数据字符串按字母顺序排列,依次写入seg-2文件,最后写入一个为0的整数作为所有字符串结束的标志,占2字节。

3)开始写入第i(i=1,2…n)道数据块。读取第i行csv文件并单个提取出采集数据,按照seg-2不同数据类型占用的字节数规定依次写入seg-2文件。重复步骤2)和3)直到文件读取结束。

一种将csv格式数据转换为seg-2格式数据的装置,包括处理器及存储器,其特征在于:处理器执行存储器中的计算机程序,该计算机程序用于执行以下过程:第一次逐行读取csv文件,获取每一行的数据描述信息及总行数,创建seg-2文件,将读取结果写入文件描述块;第二次逐行读取csv文件,每读取完一行数据就将其写入seg-2文件对应这一行的描述块和数据块。

csv文件的每一行数据包括工程信息、通道信息和采集数据三个部分,其中工程信息和通道信息为数据描述信息,在第一次逐行读取csv文件时,对每一行都单个提取出每个通道信息数据,只提取其中一行的工程信息数据。

单个数据描述信息转换为数字+关键词+空格或制表符+单个数据描述信息+‘\0’的字符串,数字表示该字符串所占字节数;累加每一个数据描述信息字符串字节数再加2得到该行数据描述信息字符串总字节数;同时记录该行通道信息数据中的采集数据长度信息。

第二次逐行读取第i行csv文件,将第一次逐行读取csv文件得到的通道信息数据写入seg文件的第i道描述块,然后再把第二次逐行读取得到第i行的采集数据写入seg文件的第i道数据块。

本发明的有益效果是:

实现将常规弹性波采集数据转换存储为统一的地震seg-2格式,有针对性地对seg-2文件描述块和道描述块、道数据块所需数据进行按行读取解析采集数据文件,使整个过程数据的解析转换逻辑简单清晰。相比于对采集数据文件中的数据进行逐个读取和解析,占用的内存更小,转换效率更高。

附图说明

附图1是弹性波采集csv数据格式示意图。

附图2是seg-2数据文件格式结构。

附图3是seg-2数据文件的文件描述块格式结构。

附图4是seg-2数据文件的道描述块格式结构。

附图5是实施例中待转换的csv数据文件源数据。

附图6是本发明基于采集数据行解析的地震seg-2格式存储过程流程图。

具体实施方式

下面结合附图及具体的实施例对发明进行进一步介绍:

一种将csv格式数据转换为seg-2格式数据的方法,包括:

第一次逐行读取csv文件,获取每一行的数据描述信息及总行数,创建seg-2文件,将读取结果写入文件描述块;

第二次逐行读取csv文件,每读取完一行数据就将其写入seg-2文件对应这一行的描述块和数据块。

csv文件的每一行数据包括工程信息、通道信息和采集数据三个部分,在第一次逐行读取csv文件时,对每一行都单个提取出每个通道信息数据,只提取其中一行的工程信息数据。

单个通道信息数据转换为数字+关键词+空格或制表符+单个通道信息数据+‘\0’的字符串,数字表示该字符串所占字节数;累加每一个通道信息数据字符串字节数再加2得到该行通道信息数据字符串总字节数;同时记录该行通道信息数据中的采集数据长度信息。

单个工程信息数据转换为数字+关键词+空格或制表符+单个工程信息数据+‘\0’的字符串,累加每一个工程信息数据字符串字节数,再加2得到工程信息数据字符串总字节数。

seg-2文件的文件描述块中:道数n=csv文件总行数,道指针子块大小=csv文件行数*4,第1道描述块指针=32+道指针子块大小+工程信息数据字符串总字节数,第i(n≥i>1)道描述块指针=第i-1道描述块指针+32+第i-1行通道信息数据字符串总字节数+第i-1行采集数据长度*h,h的数值由数据形式确定。

seg-2文件的描述块和数据块写入包括:第二次逐行读取第i行csv文件,将第一次逐行读取csv文件得到的通道信息数据写入seg文件的第i道描述块,然后再把第二次逐行读取得到第i行的采集数据写入seg文件的第i道数据块。

一种将csv格式数据转换为seg-2格式数据的装置,包括处理器及存储器,其特征在于:处理器执行存储器中的计算机程序,该计算机程序用于执行以下过程:第一次逐行读取csv文件,获取每一行的数据描述信息及总行数,创建seg-2文件,将读取结果写入文件描述块;

第二次逐行读取csv文件,每读取完一行数据就将其写入seg-2文件对应这一行的描述块和数据块。

csv文件的每一行数据包括工程信息、通道信息和采集数据三个部分,其中工程信息和通道信息为数据描述信息,在第一次逐行读取csv文件时,对每一行都单个提取出每个通道信息数据,只提取其中一行的工程信息数据。

单个数据描述信息转换为数字+关键词+空格或制表符+单个数据描述信息+‘\0’的字符串,数字表示该字符串所占字节数;累加每一个数据描述信息字符串字节数再加2得到该行数据描述信息字符串总字节数;同时记录该行通道信息数据中的采集数据长度信息。

第二次逐行读取第i行csv文件,将第一次逐行读取csv文件得到的通道信息数据写入seg文件的第i道描述块,然后再把第二次逐行读取得到第i行的采集数据写入seg文件的第i道数据块。

下面以将图5所示的csv数据文件转换为seg-2格式存储为例介绍具体过程。

图6是本发明基于采集数据行解析的地震seg-2格式存储过程流程图,本方法的实施实例分为5个阶段,具体包括:

a.按行读取图5所示csv文件,对每一行的内容根据逗号分割单独提取出属于通道信息的数据。单个数据按照seg-2中的字符串格式转换为字符串,结果存储于字符串数组content_data[i][j]。计算一行中每一个字符串的长度并累加,累加的结果再加2,得到该行字符串总长度,结果存储于int型数组stringlength_data[i]。其中i表示第i行,j表示第j个字符串。另外,对通道信息中的采集数据长度存储于int型数组datanum[i]。

b.当读取到csv文件最后一行时,对该行的内容根据逗号分割单独提取出属于工程信息的数据。单个数据按照seg-2中的字符串格式转换为字符串,结果存储于字符串数组content_file[j],其中j表示第j个字符串。计算每一个字符串的长度并累加,累加的结果再加2,得到工程信息字符串总长度,结果存储于int型变量stringlength_file。

c.记录该csv文件总行数,存储于变量linenumofthefile。

d.创建seg-2文件,开始写入“文件描述块”。根据变量linenumofthefile可写入前32个字节,再写入前33-48字节:第1道描述块指针=32+linenumofthefile*4+stringlength_file,第2道描述块指针=第1道描述块指针+32+stringlength_data[0]+datanum[0]*4,第3道描述块指针=第2道描述块指针+32+stringlength_data[1]+datanum[1]*4,第4道描述块指针=第3道描述块指针+32+stringlength_data[2]+datanum[2]*4。然后依次写入content_file[0]~content_file[4],最后写入占2个字节的整数0。

写入第1道描述块,先写入前32个字节,其中道描述块大小=32+stringlength_data[0],相应数据块大小=datanum[0]*4,数据块中采样点数=datanum[0],数据格式代码=5(表示64位浮点数),然后依次写入content_data[0][0]~content_data[0][3],在字符串结尾写入占2个字节的整数0。写入第1道描述块后,接着写入第1道数据块,本发明采用读取一行写入一行的方式,读取第1行csv文件并单个提取出采集数据1~4,每个数据占4个字节,依次写入seg-2文件。按照完成上述描述方式,完成第1道描述块和第1道数据块的写入工作,第2~4道描述块和第2~4道数据块的写入依次按照同样的顺序进行。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1