📄 segyfileread.c
字号:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
union Data{float a; char dat[4];};
union SI{unsigned short a; char s[2];};
union SP{unsigned short i; char s[2];};
main()
{
short Tn;
int i,j;
int k;
char ch;
float dat;
union SI si;//采样点数
union SP sp;//定义采样率
union Data data;//定义数据
FILE *fp, *fp1;
fp = fopen("E:\\3tk.sgy","rb");//打开SEGY数据文件
if(!fp)
{
printf("can't open fileseg!");
exit(1);
}
fseek(fp,3220L,0);
fread(si.s,2,1,fp);//读取采样点
ch=si.s[0];
si.s[0]=si.s[1];
si.s[1]=ch;
fseek(fp,3216L,0);//读取采样率
fread(sp.s,2,1,fp);
ch=sp.s[0];
sp.s[0]=sp.s[1];
sp.s[1]=ch;
j=0;
rewind(fp);
while(!feof(fp))
{
fread(&k,1,1,fp);
j+=1;
}
Tn = (short)((j-1-3600)/(float)(si.a*4+240)); //计算道数
if(!(fp1=fopen("data.dat","w+"))) //新建文本文件存储数据
{
printf("can't open text file!");
exit(1);
}
fprintf(fp1,"si = %u, sp =%u, Tn =%d, j=%d\n",si.a, sp.i, Tn, j);
for(j=0;j<2;j++)
{
fprintf(fp1,"÷÷÷÷÷÷÷÷÷÷÷÷÷÷The %d trace:--------------\n ", j+1);
for(i=0;i<si.a;i++)
{
fseek(fp,3600L+j*240L+j*si.a*4L+240L+i*4L,0);
fseek(fp,3600L+240L+i*4L,0);
fread(data.dat,4,1,fp);
ch=data.dat[0];
data.dat[0]=data.dat[3];
data.dat[3]=ch;
ch=data.dat[1];
data.dat[2]=data.dat[1];
data.dat[1]=ch;
fprintf(fp1,"%f ", data.a);
if((i+1)%10==0)
fprintf(fp1,"\n");
if(fabs(data.a)>1e6)
printf("error");
}
fprintf(fp1,"\n");
}
fclose(fp1);
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -