资源描述:
《用c语言读写sgy格式的地震数据文件》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Author:Yangwqcumt用C语言读写SGY格式的地震数据Yangwqcumt百度专用,转载需授权地震勘探野外采集的数据,以及经过资料处理获得的三维数据体,只要是放在计算机里,都是以二进制文件的形式存放的。这些文件的处理显示等工作,一般都可以用商业化的软件进行。但是作为一个从事地震勘探研究的技术人员,有时会有些想法,有某种灵感,但是原有的软件又不允许你去做某种试验以验证你的想法。这时候,自编个小程序显然有必要,而且弄好后你的成就感会很强烈。1.SEGY格式地震数据文件地震数据,是以各种格式存放的。所谓格式,指的是地震数据以及各种信息在文件内部的存放方式及顺
2、序。常见的地震数据格式,有segy格式、seg2格式、segd格式等。同样的格式,还有微机版、工作站版及其它版本。本文仅是入门级材料,我们仅就微机版segy格式进行分析。Segy格式的地震数据文件,属于典型的流式文件,它的信息和数据都是按字节顺序一个个地存放的,每个字节都有其特定的含义。这种格式的文件,由文件头部的3600字节以及地震道组成。文件头前部的3200字节共分为40行,每行80个字符,但这些字符不是ascii码,是一种称为ebcdic的编码。一般这部分都不去读,或者只能显示出来查看其中的内容。接下来是400字节的二进制部分。这里面有长整型数和短整型数,其
3、具体含义参见附录一。Author:Yangwqcumt每个地震道由道头240字节(参见附录一)和地震数据组成。地震数据的个数和类型(指它是浮点数整数还是什么)文件头中有定义。此处我们假定所有的数据都是微机的四字节浮点数。2.文件头部3200字节特殊编码部分的读取。该部分共分为40行,每行80个字符,但这些字符不是ascii码,是一种称为ebcdic的编码。转换成ascii码可以采用查表的方法进行。一般处理地震数据不用读这部分的内容。#include"stdio.h"#include"stdlib.h"voidmain(){unsignedcharE2A[256]=
4、{0,1,2,3,156,9,134,127,151,141,142,11,12,13,14,15,16,17,18,19,157,133,8,135,24,25,146,143,28,29,30,31,128,129,130,131,132,10,23,27,136,137,138,139,140,5,6,7,144,145,22,147,148,149,150,4,152,153,154,155,20,21,158,26,32,160,161,162,163,164,165,166,167,168,91,46,60,40,43,33,38,169,170,17
5、1,172,173,174,175,176,177,93,36,42,41,59,94,45,47,178,179,180,181,182,183,184,185,124,44,37,95,62,63,186,187,188,189,190,191,192,193,194,96,58,35,64,39,61,34,195,97,98,99,100,101,102,103,104,105,196,197,198,199,200,201,202,106,107,108,109,110,111,112,113,114,203,204,205,206,207,208,20
6、9,126,115,116,117,118,119,120,121,122,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,123,65,66,67,68,69,70,71,72,73,232,233,234,235,236,237,125,74,75,76,77,78,79,80,81,82,238,239,240,241,242,243,92,159,83,84,85,86,87,88,89,90,244,245,246,247,24
7、8,249,48,49,50,51,52,53,54,55,56,57,250,251,252,253,254,255};inti,j;unsignedcharf3200[3200];FILE*f1;chars1[200];printf("InputSgyFileName:");scanf("%s",s1);//输入文件名f1=fopen(s1,"rb");fread(f3200,3200,1,f1);fclose(f1);for(i=0;i<40;i++){for(j=0;j<80;j++)printf("%c",E2A[f3200[i*80+j]]);pr
8、intf(