⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tseg2.cpp

📁 对seg2格式数据处理的一个包装类
💻 CPP
字号:
// TSeg2.cpp: implementation of the TSeg2 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "seg2.h"
#include "TSeg2.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

TSeg2::TSeg2()
{
	m_IsSeg2File=FALSE;
	m_IsOpen=FALSE;
	m_Seg2File= new CFile;
}

TSeg2::~TSeg2()
{
	if(m_IsOpen!=FALSE)m_Seg2File->Close();
	delete m_Seg2File;
}

//////////////////////////////////////////////////////////////////////
// TSeg2FileHead Class
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

TSeg2FileHead::TSeg2FileHead()
{
	iId=0X553a;
	iFxg=0;//修改数
	iPointLarge=0;//道指针子块的大小(M)
	 iNt=0;//文件中的道数
	 cAscii=0,cAscii1=0,cAscii2=0;//字符串终端大小
	cLineend=0,cLineend1=0,cLineend2=0;
	m_FHString.RemoveAll();
}

TSeg2FileHead::~TSeg2FileHead()
{
	m_FHString.FreeExtra();
}

//////////////////////////////////////////////////////////////////////
// TSeg2Chanel Class
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

TSeg2Chanel::TSeg2Chanel()
{
	iId=0;
	iLargeHead=0;
    iLargeData=0;
    iSamples=0;
    iDataType=0;
	 cChar.Empty();
	m_THString.RemoveAll();
}

TSeg2Chanel::~TSeg2Chanel()
{
	m_THString.FreeExtra();
}

TSeg2FileHead& TSeg2::ReadFileHead()
{
	m_Seg2File->SeekToBegin();
	m_Seg2File->Read(&m_FileHead.iId, 2);
	m_Seg2File->Read(&m_FileHead.iFxg, 2);
	m_Seg2File->Read(&m_FileHead.iPointLarge, 2);
	m_Seg2File->Read(&m_FileHead.iNt, 2);
	m_Seg2File->Read(&m_FileHead.cAscii,1);
	m_Seg2File->Read(&m_FileHead.cAscii1, 1);
	m_Seg2File->Read(&m_FileHead.cAscii2, 1);
	m_Seg2File->Read(&m_FileHead.cLineend, 1);
	m_Seg2File->Read(&m_FileHead.cLineend1, 1);
	m_Seg2File->Read(&m_FileHead.cLineend2, 1);
	m_Seg2File->Read(&m_FileHead.cDemo1, 18);
	for(int i=0;i<m_FileHead.iNt;i++)m_Seg2File->Read(&m_FileHead.lPointNt[i], 4);
	m_FileHead.m_FHString.RemoveAll(); 
	CString str1;
	int lenstr=0;
	char mystring[80];
	m_Seg2File->Read(&lenstr, 2);
	str1.Format("%i",lenstr);
	   while(lenstr!=0)
 		  {
		       m_Seg2File->Read(mystring,lenstr-2);
				str1+=mystring;
				m_FileHead.m_FHString.Add(str1);
				lenstr=0;
			     m_Seg2File->Read(&lenstr, 2);
			 	str1.Format("%i",lenstr);
 		  }
	m_FileHead.Position=m_Seg2File->GetPosition();

/*lenstr=m_FileHead.m_FHString.GetSize();//测试
for(i=0;i<lenstr;i++)
{
stmp=m_FileHead.m_FHString.GetAt(i);
AfxMessageBox(stmp);

}*/


	return m_FileHead;
}

TSeg2Chanel& TSeg2::ReadChanel(int nt)
{
//	int i;
   	m_Seg2File->Seek(m_FileHead.lPointNt[nt-1],CFile::begin);
	m_Seg2File->Read(&m_ChanelHead.iId,2);
	m_Seg2File->Read(&m_ChanelHead.iLargeHead,2);
	m_Seg2File->Read(&m_ChanelHead.iLargeData,4);
	m_Seg2File->Read(&m_ChanelHead.iSamples,4);
	m_Seg2File->Read(&m_ChanelHead.iDataType,1);
	m_Seg2File->Read(&m_ChanelHead.cDemo,19);
	m_ChanelHead.m_THString.RemoveAll();
	CString str1;
	int lenstr=0;
	char mystring[80];
	m_Seg2File->Read(&lenstr, 2);
	str1.Format("%i",lenstr);
    while(lenstr!=0)
	  {
	       m_Seg2File->Read(mystring,lenstr-2);
			str1+=mystring;
			m_ChanelHead.m_THString.Add(str1);
			lenstr=0;
		     m_Seg2File->Read(&lenstr, 2);
		 	str1.Format("%i",lenstr);
 	  }
	m_ChanelHead.lpData.SetSize(m_ChanelHead.iLargeData);
	m_Seg2File->Seek(m_FileHead.lPointNt[nt-1]+m_ChanelHead.iLargeHead,CFile::begin);
	m_Seg2File->Read((LPSTR)m_ChanelHead.lpData.GetData(),m_ChanelHead.iLargeData);
 	return m_ChanelHead;
}

BOOL TSeg2::IsSeg2File()
{
	if(m_IsOpen==FALSE)
	{
		AfxMessageBox("q");//,MB_ICONQUESTION);
		m_IsSeg2File=FALSE;
		return m_IsSeg2File;
	}
	m_Seg2File->Read(&m_FileHead.iId, 2 );
	if(m_FileHead.iId!=14933)
	{
	   AfxMessageBox("打开的源文件格式不对!!!...");
	 	m_IsSeg2File=FALSE;
       return FALSE;   
	}
 	   m_IsSeg2File=TRUE;
       return TRUE;   
}

void TSeg2::OpenFile()
{
		CFileDialog dlg(TRUE,"*.SG2",NULL,OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"SEG2格式数据文件(*.SG2)|*.sg2|所有文件(*.*)|*.*|",NULL);
	dlg.m_ofn.lpstrTitle="SEG2格式的数据文件";
   //------用来检测目前的操作系统的版本信息
        int nStructSize = 0;
        DWORD dwVersion, dwWindowsMajorVersion, dwWindwosMinorVersion;
        dwVersion = GetVersion();
        dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
        dwWindwosMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
        if(dwVersion < 0x80000000)
        {
        nStructSize = 88; //2k,xp下显示新的版本
        }
        else
        {
        nStructSize = 76; //98下显示老版本,如图1
        }
        dlg.m_ofn.lStructSize = nStructSize; //------用来检测目前的操作系统的版本信息
	dlg.m_ofn.Flags |= OFN_EXPLORER |OFN_ALLOWMULTISELECT; 
///////////////
	if(dlg.DoModal()==IDCANCEL)return;
	m_strFileName=dlg.GetPathName();
//	AfxMessageBox(m_strFileName);
	CFileException e;
	if( !m_Seg2File->Open(LPCTSTR(m_strFileName),CFile::modeRead,&e ) )
   {
#ifdef _DEBUG
	  afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
   }
	m_IsOpen=TRUE;
		
}

int TSeg2::ReadSeg2()
{
	OpenFile();
	if(IsSeg2File()!=TRUE)return 1;
	ReadFileHead();
//	for(int i=0;i<
	ReadChanel(1);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -