xfile.cpp
来自「该程序是用vc开发的对动态数组进行管理的DLL」· C++ 代码 · 共 2,282 行 · 第 1/3 页
CPP
2,282 行
int XFileAsc::read( unsigned short *us ,int len ){ int i; for(i=0;i<len;i++) { xfile>>us[i]; } return 1; }int XFileAsc::read( int *n ,int len ){ int i; for(i=0;i<len;i++) { xfile>>n[i]; } return 1;}int XFileAsc::read( unsigned int *un ,int len ){ int i; for(i=0;i<len;i++) { xfile>>un[i]; } return 1;}int XFileAsc::read( long *l ,int len ){ int i; for(i=0;i<len;i++) { xfile>>l[i]; } return 1; }int XFileAsc::read( unsigned long *ul ,int len ){ int i; for(i=0;i<len;i++) { xfile>>ul[i]; } return 1; }int XFileAsc::read( float *f ,int len ){ int i; for(i=0;i<len;i++) { xfile>>f[i]; } return 1; }int XFileAsc::read( double *d ,int len ){ int i; for(i=0;i<len;i++) { xfile>>d[i]; } return 1; }int XFileAsc::write( short *s ,int len,int nwid ){ int i; for(i=0;i<len;i++) { xfile<<s[i]<<" "; if((i+1)%nwid == 0) xfile<<enter; } return 1; }int XFileAsc::write( unsigned short *us ,int len,int nwid ){ int i; for(i=0;i<len;i++) { xfile<<us[i]<<" "; if((i+1)%nwid == 0) xfile<<enter; } return 1; }int XFileAsc::write( int *n ,int len,int nwid ){ int i; for(i=0;i<len;i++) { xfile<<n[i]<<" "; if((i+1)%nwid == 0) xfile<<enter; } return 1; }int XFileAsc::write( unsigned int *un ,int len,int nwid ){ int i; for(i=0;i<len;i++) { xfile<<un[i]<<" "; if((i+1)%nwid == 0) xfile<<enter; } return 1; }int XFileAsc::write( long *l ,int len,int nwid ){ int i; for(i=0;i<len;i++) { xfile<<l[i]<<" "; if((i+1)%nwid == 0) xfile<<enter; } return 1; }int XFileAsc::write( unsigned long *ul,int len,int nwid ){ int i; for(i=0;i<len;i++) { xfile<<ul[i]<<" "; if((i+1)%nwid == 0) xfile<<enter; } return 1; }int XFileAsc::write( float *f ,int len,int nwid ){ int i; for(i=0;i<len;i++) { xfile<<f[i]<<" "; if((i+1)%nwid == 0) xfile<<enter; } return 1; }int XFileAsc::write( double *d ,int len,int nwid ){ int i; for(i=0;i<len;i++) { xfile<<d[i]<<" "; if((i+1)%nwid == 0) xfile<<enter; } return 1; }int XFileAsc::toCur(long cur){ return xfile.toCur(cur);}int XFileAsc::toEnd(){return xfile.toEnd();}int XFileAsc::toBeg(){return xfile.toBeg();}long XFileAsc::length(){return xfile.length();}long XFileAsc::tell(){return xfile.tell();}int XFileAsc::rewind(){return xfile.rewind();}/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*//*@@@@@@@@@@@@@@@@@ XFileBin @@@@@@@@@@@@@@@@@@@@@@*//*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/int XFileBin::openr(char *path ){ return xfile.openrb(path);}int XFileBin::openw(char *path ){ return xfile.openwb(path);}XFileBin::XFileBin(){}XFileBin::~XFileBin(){ close();}void XFileBin::go(long cur){ toCur(cur);}void XFileBin::close(){ xfile.close();}int XFileBin::read(char *s,int len){ xfile.read(s,len*sizeof(char)); return 1;}int XFileBin::write(char *s,int len){ xfile.write(s,len*sizeof(char)); return 1;}int XFileBin::read(short *s,int len){ xfile.read(s,len*sizeof(short)); return 1;}int XFileBin::read(int *n,int len){ xfile.read(n,len*sizeof(int)); return 1;}int XFileBin::read(double *d,int len){ xfile.read(d,len*sizeof(double)); return 1;}int XFileBin::read(float *f,int len){ xfile.read(f,len*sizeof(float)); return 1;}int XFileBin::read(unsigned long *ul,int len){ xfile.read(ul,len*sizeof(unsigned long)); return 1;}int XFileBin::read( long *l,int len){ xfile.read(l,len*sizeof(long)); return 1;}int XFileBin::read(unsigned int *un,int len){ xfile.read(un,len*sizeof(unsigned int)); return 1;}int XFileBin::read(unsigned short *us,int len){ xfile.read(us,len*sizeof(unsigned short)); return 1;}int XFileBin::write(short *s,int len){ xfile.write(s,len); return 1;}int XFileBin::write(int *n,int len){ xfile.write(n,len*sizeof(int)); return 1;}int XFileBin::write(double *d,int len){ xfile.write(d,len*sizeof(double)); return 1;}int XFileBin::write(float *f,int len){ xfile.write(f,len*sizeof(float)); return 1;}int XFileBin::write(unsigned long *ul,int len){ xfile.write(ul,len*sizeof(unsigned long)); return 1;}int XFileBin::write( long *l,int len){ xfile.write(l,len*sizeof(long)); return 1;}int XFileBin::write(unsigned int *un,int len){ xfile.write(un,len*sizeof(unsigned int)); return 1;}int XFileBin::write(unsigned short *us,int len){ xfile.write(us,len*sizeof(unsigned short)); return 1;}int XFileBin::write2(void* d ,int len){ xfile.write(d,len); return 1; }int XFileBin::read2 (void* d ,int len){ xfile.read(d,len); return 1;}int XFileBin::toCur(long cur){ return xfile.toCur(cur);}int XFileBin::toEnd(){return xfile.toEnd();}int XFileBin::toBeg(){return xfile.toBeg();}long XFileBin::length(){return xfile.length();}long XFileBin::tell(){return xfile.tell();}int XFileBin::rewind(){return xfile.rewind();}/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*//*@@@@@@@@@@@@@@@@@@@@@@@ XFileSeis @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*//*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ XFileSeis::XFileSeis() { DATA=NULL; HEAD=NULL; Data=NULL; fTraceMax=NULL; clear(); }XFileSeis::~XFileSeis(){ if(Data!=NULL)
{
free(Data);
Data=NULL;
}
if(fTraceMax!=NULL)
{
free(fTraceMax);
fTraceMax=NULL;
} clear(); close();}void XFileSeis::clear(){ if(DATA!=NULL) { free2float(DATA); DATA=NULL; } if(HEAD!=NULL) { free(HEAD); HEAD=NULL; } strcmp(FileName,""); memset(&Bhead,'\0',400); memset(&Head,'\0',240); memset(EBC,'\0',3200); memset(ASC,'\0',3200);}void XFileSeis::close(){ xfile.close();}int XFileSeis::openw(char* szName, char * szFileType,int conv, unsigned short nSample,unsigned short inter, float tD2){
if(tD2>=5)tD2/=1000; ///////////// if(xfile.openwb(szName)==0) { cio<<szName<<" write binary file error,and EXIT ...\n"; exit(0); } clear(); strcpy(FileName,szName); NS=nSample; DT=inter; nConv=conv; if( strcmp(szFileType,"segy") == 0 || strcmp(szFileType,"SEGY") == 0 ) { nFileType=1; BSize=3600; HSize=240; D2=tD2; } else if( strcmp(szFileType,"su") == 0 || strcmp(szFileType,"SU") == 0 ) { nFileType=2; BSize=0; HSize=240; D2=tD2; } else if( strcmp(szFileType,"bin") == 0 || strcmp(szFileType,"BIN") == 0 ) { nFileType=3; BSize=0; HSize=0; D2=0; } else { nFileType=4; cio<<"No file type : bin,segy or su! "<<szFileType<<"\n"; exit(0); }
if(Data!=NULL)
{
free(Data);
Data=NULL;
}
if(fTraceMax!=NULL)
{
free(fTraceMax);
fTraceMax=NULL;
} Data=alloc1float(NS); fTraceMax=alloc1float(NS);cio<<"\n\n**** "<<szName<<" info ****"<<enter; cio<<"NS:"<<NS<<enter; cio<<"DT:"<<DT<<enter; cio<<"D2:"<<D2<<enter; return 1;}int XFileSeis::openr(char* szName,char * szFileType,int conv, unsigned short nSample ,unsigned short inter,float tD2){ if(xfile.openrb(szName)==0) { cio<<szName<<" read binary file error,and EXIT ...\n"; exit(0); } clear(); strcpy(FileName,szName); nConv=conv; if( strcmp(szFileType,"segy") == 0 || strcmp(szFileType,"SEGY") == 0 ) { nFileType=1; BSize=3600; HSize=240; xfile.rewind(); xfile.read(EBC,3200); xfile.rewind(); xfile.read(ASC,3200); ConvEBCToASC(ASC); xfile.read(&Bhead,400); xfile.read(&Head,HSize); if(nConv) swapXSegybhead(&Bhead); if(nConv) swapXSegyhead(&Head); DT=Head.dt;
NS=Head.ns; NT=(xfile.length()-BSize)/(NS*4+HSize); TimeEnd=(int)(DT/1000.0f*NS); D2=Head.d2; if(D2>=5)D2/=1000; ///////////// } else if( strcmp(szFileType,"su") == 0 || strcmp(szFileType,"SU") == 0 ) { nFileType=2; BSize=0; HSize=240; xfile.rewind(); xfile.read(&Head,HSize); if(nConv) swapXSegyhead(&Head); DT=Head.dt; NS=Head.ns; NT=xfile.length()/(NS*4+HSize); TimeEnd=(int)(DT/1000.0f*NS); D2=Head.d2;
if(D2>=5)D2/=1000; ///////////// } else if( strcmp(szFileType,"bin") == 0 || strcmp(szFileType,"BIN") == 0 ) { nFileType=3; BSize=0; HSize=0; NS=nSample; DT=inter; D2=tD2;
if(D2>=5)D2/=1000; ///////////// NT=xfile.length()/(NS*4); TimeEnd=(int)(DT/1000.0f*NS); }
else if(strcmp(szFileType,"2ds") == 0 || strcmp(szFileType,"2DS") == 0)
{
nFileType=5;
BSize=0;
HSize=0;
} else { nFileType=4; cio<<"No file type : bin,segy or su! "<<szFileType<<"\n"; exit(0); } if(Data!=NULL)
{
free(Data);
Data=NULL;
}
if(fTraceMax!=NULL)
{
free(fTraceMax);
fTraceMax=NULL;
} Data=alloc1float(NS); fTraceMax=alloc1float(NS);cio<<"\n\n**** "<<szName<<" info ****"<<enter; cio<<"NS:"<<NS<<enter; cio<<"NT:"<<NT<<enter; cio<<"DT:"<<DT<<enter; cio<<"D2:"<<D2<<enter; return 1;} void XFileSeis::read(int index){ if( index < 0 )index=0; if( index > NT - 1 )index=NT - 1 ; memset(&Head,'\0',240); memset(Data,'\0',NS*4); xfile.toCur(index * (HSize + NS*4) + BSize ); if(HSize == 240 ) xfile.read(&Head,HSize);
if(Head.d2>=5)Head.d2/=1000; ///////////// xfile.read(Data,NS*4); if(nConv) { if(HSize == 240 ) swapXSegyhead(&Head); swap4Arr(Data,NS); } if(nFileType==3) { Head.ns=NS; Head.dt=DT; Head.d2=D2; Head.tracr=index+1; Head.tracl=index+1; }}char* XFileSeis::asc(){ return ASC;}int XFileSeis::write(char* ebcdic){ if(nFileType == 1) { xfile.write(ebcdic,3200); return 1; } return 0; }int XFileSeis::write(XSegybhead* bhead){ if(nFileType == 1) { if(nConv) swapXSegybhead(bhead); xfile.write(bhead,400); return 1; } return 0;}int XFileSeis::write(XSegyhead* head){ if(nFileType != 3 ) { if(nConv) swapXSegyhead(head); xfile.write(head,HSize); return 1; } return 0;}int XFileSeis::write(float* data){ if(nConv) swap4Arr(data,NS); xfile.write(data,NS*4); return 1; }void XFileSeis::readAll(){ read(0,NT-1);}void XFileSeis::read(int idxStart,int idxEnd){ clear(); if(idxStart<=0 || idxStart>NT-1)idxStart=0; if(idxEnd<0 || idxEnd>=NT-1)idxEnd=NT-1; if(idxStart > idxEnd ) { idxStart=0; idxEnd=NT-1; } NTRead=idxEnd-idxStart+1; DATA = alloc2float(NS,NTRead); HEAD = ( XSegyhead* )malloc( NTRead*sizeof(XSegyhead) ); for(int i=idxStart; i<=idxEnd; i++) { read(i); memcpy(&(HEAD[i-idxStart]),&Head,HSize); memcpy(DATA[i-idxStart],Data,NS*4); } }void XFileSeis::NormalizeOnTrace(float Amp){ int i,j; if(Amp<=0)Amp=1; fNormalAmp=Amp; for(i=0;i<NTRead;i++) fTraceMax[i]=max_f(DATA[i],NS); for(i=0;i<NTRead;i++) { if(fTraceMax[i] ==0 )continue; for(j=0;j<NS;j++) DATA[i][j]=DATA[i][j]/fTraceMax[i] * Amp; }}void XFileSeis::NormalizeOnAll(float Amp){ int i,j; if(Amp<=0)Amp=1; fNormalAmp=Amp;
for(i=0,fAllMax=DATA[0][0];i<NTRead;i++) for(j=0;j<NS;j++)
{ if(fAllMax<fabs(DATA[i][j])) fAllMax=(float)fabs(DATA[i][j]);
} if(fAllMax==0)return;
fMaxV1=DATA[0][0];
fMinV1=90000;
fMaxV=DATA[0][0]/fAllMax* Amp;
fMinV=DATA[0][0]/fAllMax* Amp; for(i=0;i<NTRead;i++) for(j=0;j<NS;j++)
{
if(fMaxV1<DATA[i][j])
fMaxV1=DATA[i][j];
if(fMinV1>DATA[i][j] && DATA[i][j] > 0)
fMinV1=DATA[i][j]; DATA[i][j]=DATA[i][j]/fAllMax * Amp;
if(fMaxV<DATA[i][j])
fMaxV=DATA[i][j];
if(fMinV>DATA[i][j])
fMinV=DATA[i][j];
} }
void XFileSeis::RestoreOnTrace(){ int i,j; for(i=0;i<NTRead;i++) for(j=0;j<NS;j++) DATA[i][j]=DATA[i][j]*fTraceMax[i] / fNormalAmp;} void XFileSeis::RestortOnAll(){ int i,j; for(i=0;i<NTRead;i++) for(j=0;j<NS;j++) DATA[i][j]=DATA[i][j]*fAllMax / fNormalAmp; }char * XFileSeis::ebc(){ return EBC;}XSegybhead * XFileSeis::bhead(){ return &Bhead;}char * XFileSeis::filename(){ return FileName;}XSegyhead * XFileSeis::head(){ return &Head;}float * XFileSeis::data(){ return Data;}long XFileSeis::nt(){ return NT;}unsigned short XFileSeis::ns(){ return NS;}unsigned short XFileSeis::dt(){ return DT;}float XFileSeis::d2()
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?