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 + -
显示快捷键?