📄 segy.txt
字号:
#include"stdio.h"
#include"math.h"
int nsample,tsample,fsample,max_length,delay[20000];
void sgytoasc(in_F_name,out_F_name,start_trace,end_trace)
char in_F_name[],out_F_name[];
int start_trace,end_trace;
{char file_header[80];
int ibuf[200],kbuf[120];
int trace_data[9000];
int i,j,k,nsamp,k10,ksu;
FILE *in,*out;
in=fopen(in_F_name,"rb");
out=fopen(out_F_name,"w");
/*** 读写文件头 ***/
for(i=0;i<40;i++)
for(j=0;j<80;j++)
{fread(&file_header[j],1,1,in);
fwrite(&file_header[j],1,1,out);
}
/*** 读写二进制文件头 ***/
for(i=0;i<20;i++)
{for(j=0;j<10;j++)
{fread(&ibuf[i*10+j],2,1,in);
fprintf(out,"%7d",ibuf[i*10+j]);
}
fprintf(out,"\n");
}
/*** 定义样本数目 ***/
nsamp=ibuf[10];
printf("%d\n",nsamp);
/*** 读写轨道头文件 ***/
for(k=start_trace;k<=end_trace;k++)
{for(i=0;i<120;i++)
fread(&kbuf[i],2,1,in);
/*** 写入轨迹头 ***/
for(i=0;i<12;i++)
{for(j=0;j<10;j++)
fprintf(out,"%7d",kbuf[i*10+j]);
fprintf(out,"\n");
}
/*** 读取轨迹数据 ***/
for(i=0;i<nsamp;i++)
fread(&trace_data[i],2,1,in);
/*** 计算样本数和10的整取***/
k10=nsamp/10;
ksu=nsamp%10;
/***写入轨迹数据 ***/
for(i=0;i<k10;i++)
{for(j=0;j<10;j++)
fprintf(out,"%7d",trace_data[i*10+j]);
fprintf(out,"\n");
}
for(i=0;i<ksu;i++)
fprintf(out,"%7d",trace_data[k10*10+i]);
fprintf(out,"\n");
}
fclose(in);
fclose(out);
}
void fdmaxdly(in_F_name,start_trace,end_trace)
char in_F_name[];
int start_trace,end_trace;
{char file_header[80];
int ibuf[200],kbuf[120];
int trace_data[9000];
int i,j,k,max_delay;
FILE *in;
in=fopen(in_F_name,"rb");
/*** 读取3200字节的文件头***/
for(i=0;i<40;i++)
for(j=0;j<80;j++)
fread(&file_header[j],1,1,in);
/*** 读取400字节的二进制头 ***/
for(i=0;i<200;i++)
fread(&ibuf[i],2,1,in);
/*** 定义样本数目***/
tsample=ibuf[8];
fsample=1000/tsample;
nsample=ibuf[10];
if(start_trace!=0)
{for(k=0;k<start_trace;k++)
{
/***读取轨迹头***/
for(i=0;i<120;i++)
fread(&kbuf[i],2,1,in);
/***读取轨迹数据 ***/
for(i=0;i<nsample;i++)
fread(&trace_data[i],2,1,in);
}
}
for(k=start_trace;k<=end_trace;k++)
{
/***读取轨迹头 ***/
for(i=0;i<120;i++)
fread(&kbuf[i],2,1,in);
delay[k]=kbuf[54];
/***读取轨迹数据***/
for(i=0;i<nsample;i++)
fread(&trace_data[i],2,1,in);
}
/*** 找出最大延迟时间 ***/
max_delay=0;
for(k=start_trace;k<=end_trace;k++)
{ if(delay[k]>max_delay) max_delay=delay[k];
}
/*** 决定最大记录长度时间***/
max_length=nsample+max_delay*fsample;
fclose(in);
}
void sgytosgy(in_F_name,out_F_name,start_trace,end_trace)
char in_F_name[],out_F_name[];
int start_trace,end_trace;
{char file_header[80];
int ibuf[200],kbuf[120];
int trace_data[9000];
int i,j,k;
FILE *in,*out;
in=fopen(in_F_name,"rb");
out=fopen(out_F_name,"wb");
trace_data[8999]=0;
/*** 读写 3200 字节的头文件 ***/
for(i=0;i<40;i++)
for(j=0;j<80;j++)
{fread(&file_header[j],1,1,in);
fwrite(&file_header[j],1,1,out);
}
/*** 读写 400字节二进制头文件 ***/
for(i=0;i<200;i++)
{fread(&ibuf[i],2,1,in);
fwrite(&ibuf[i],2,1,out);
}
if(start_trace!=0)
{for(k=0;k<start_trace;k++)
/*** 读轨道头***/
for(i=0;i<120;i++)
fread(&kbuf[i],2,1,in);
/*** 读轨道数据 ***/
for(i=0;i<nsample;i++)
fread(&trace_data[i],2,1,in);
}
for(k=start_trace;k<=end_trace;k++)
{
/*** 读轨道头 ***/
for(i=0;i<120;i++)
fread(&kbuf[i],2,1,in);
printf("%d,%d,%d,%d\n",k,kbuf[54],delay[k],max_length);
/*** 写轨道头 ***/
for(i=0;i<120;i++)
fwrite(&kbuf[i],2,1,out);
/*** 读轨道数据 ***/
for(i=0;i<nsample;i++)
fread(&trace_data[i],2,1,in);
if(delay[k]<=0)
{
/*** 写轨道数据 ***/
for(i=0;i<nsample;i++)
fwrite(&trace_data[i],2,1,out);
for(i=0;i<max_length-nsample;i++)
fwrite(&trace_data[8999],2,1,out);
}
else
/*** 写轨道数据 ***/
{
for(i=0;i<kbuf[54]*fsample;i++)
fwrite(&trace_data[8999],2,1,out);
for(i=0;i<nsample;i++)
fwrite(&trace_data[i],2,1,out);
for(i=0;i<max_length-nsample-kbuf[54]*fsample;i++)
fwrite(&trace_data[8999],2,1,out);
}
}
fclose(in);
fclose(out);
printf("%d,%d\n",k,max_length);
}
void resample(in_F_name,out_F_name,start_trace,end_trace)
char in_F_name[],out_F_name[];
int start_trace,end_trace;
{char file_header[80];
int ibuf[200],kbuf[120];
int trace_data[9000];
int i,j,k;
FILE *in,*out;
in=fopen(in_F_name,"rb");
out=fopen(out_F_name,"wb");
/*** 读写3200字节的头文件 ***/
for(i=0;i<40;i++)
for(j=0;j<80;j++)
{fread(&file_header[j],1,1,in);
fwrite(&file_header[j],1,1,out);
}
/*** 读写400字节二进制文件头 ***/
for(i=0;i<200;i++)
{fread(&ibuf[i],2,1,in);
if(i==8) ibuf[i]=ibuf[i]*2;
if(i==10) ibuf[i]=ibuf[i]/2;
if(i==30) ibuf[i]=ibuf[i]/2;
fwrite(&ibuf[i],2,1,out);
}
nsample=ibuf[10]*2;
printf("%d\n",nsample);
for(k=start_trace;k<end_trace;k++)
{
/*** 读轨道头***/
for(i=0;i<120;i++)
fread(&kbuf[i],2,1,in);
/*** 写轨道头 ***/
for(i=0;i<120;i++)
{ if(i==57) kbuf[i]=kbuf[i]/2;
if(i==58) kbuf[i]=kbuf[i]*2;
fwrite(&kbuf[i],2,1,out);
}
/*** 读轨道数据***/
for(i=0;i<nsample;i++)
fread(&trace_data[i],2,1,in);
/*** 写轨道数据 ***/
for(i=0;i<nsample;i=i+2)
fwrite(&trace_data[i],2,1,out);
}
fclose(in);
fclose(out);
}
/*** start_trace begin with 0 and end_trace=tatal_tacees-1 ***/
/*** in_F_name=input file name and out_F_name=out put file name ***/
/*** flag=1 意味着嵌入延迟 ***/
/*** flag=2 意味着将segy 转换为ASSII***/
/*** flag=3意味着从2到1重新取样 ***/
main()
{
int start_trace=0,end_trace=2474;
int flag=2;
static char in_F_name[20]={"test.segy"};
static char out_F_name[20]={"test.xyz"};
if(flag==1)
{fdmaxdly(in_F_name,start_trace,end_trace);
sgytosgy(in_F_name,out_F_name,start_trace,end_trace);}
else if(flag==2)
sgytoasc(in_F_name,out_F_name,start_trace,end_trace);
else
resample(in_F_name,out_F_name,start_trace,end_trace);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -