這個Zero的細部操作其實滿複雜的,只是這樣做的確可以增加主程式在讀寫該檔時的程式碼可讀性。
omd檔有三種格式,一種是舊的一般版,一種是新的一般版,最後是Gamma版。
COmdFile0.h
#ifndef OMDFILE0_H
#define OMDFILE0_H
#include "COmdFile1.h"
#include "COmdFileGm.h"
enum KindOfOmd { OMD_OLD = 0, OMD_AtYPE, OMD_GAMMA };
class COmdFile0
{
//Diff of Txt file
COmdFileFactor *m_Omd;
COmdFileFactor *m_GmOmd;
TxtStrData m_dTxt;
public:
OmdHead& GetFileHead();
const OmdHead GetFileHead() const;
void SetFileHead(const OmdHead& _H);
//這些介面剩下 void CSelExcelDlg::otherOmd2xls(CXlsFile2* pHDfXls) 在使用
CString GetPnlID () const;
CString GetMsrDvc() const;
CString GetPrb () const;
CString GetCHID () const;
CString GetInch () const;
CString GetNitsLv() const;
void SetPnlID (const CString& _S);
void SetMsrDvc (const CString& _S);
void SetPrb (const CString& _S);
void SetCHID (const CString& _S);
void SetInch (const CString& _S);
void SetNitsLv (const CString& _S);
public:
COmdFile0();
virtual ~COmdFile0();
BOOL Open(LPCTSTR _S);
BOOL Open(LPCTSTR _S, CFileException& _Fx);
BOOL Save(LPCTSTR _S, CFileException& _Fx, RNA& _D);
void Close();
void iOmdData(RNA& data);
void oOmdData(RNA& data);
RNA oOmdData();
private:
void openWhichKindOmefile();
void saveWhichKindOmefile(RNA&);
void getOpenSample(LPCTSTR , CFileException& );
};
#endif // OMDFILE0_H
COmdFile0.cpp
自動判斷要讀的檔和寫成什麼檔
簡化omd檔的操作,讓各式omd檔都保有特定的特微可以判斷。void COmdFile0::openWhichKindOmefile()
{
KindOfOmd omdKind;
if (m_dTxt.at(0).Find(':') != -1)
omdKind = OMD_OLD;
else if (m_dTxt.at(0).Find("Gamma") != -1)
omdKind = OMD_GAMMA;
else
omdKind = OMD_AtYPE;
switch(omdKind)
{
case OMD_AtYPE: m_Omd = new COmdFile1(OMD_AtYPE); break;
case OMD_GAMMA: m_Omd = new COmdFileGm(); break;
case OMD_OLD:
default: m_Omd = new COmdFile1(OMD_OLD);
}
}
void COmdFile0::saveWhichKindOmefile(RNA& _R)
{
CString str;
for (int i = 0; i < 256; ++i)
{
str.Format("%d", i);
if ((_R.Find("白","gamma",str,"0 255 255").GetSqncArea() != AA_00) || //有量測 = .GetMsrFlowNo() != 99
(_R.Find("紅","gamma",str,"0 255 255").GetSqncArea() != AA_00) ||
(_R.Find("綠","gamma",str,"0 255 255").GetSqncArea() != AA_00) ||
(_R.Find("藍","gamma",str,"0 255 255").GetSqncArea() != AA_00))
{
//omdKind = OMD_GAMMA;
m_GmOmd = new COmdFileGm();
break;
}
}
m_Omd = new COmdFile1(OMD_AtYPE);
}
沒有留言:
張貼留言