📄 selfdb.cpp
字号:
return aReport.GetSize();
}
int CSelfDB::LoadReport(CStock* pstock)
{
SP_ASSERT(m_bIsOK && pstock && pstock->GetStockInfo().IsValidStock());
if (!m_bIsOK || !pstock || !pstock->GetStockInfo().IsValidStock())
return 0;
pstock->GetReport().RemoveAll();
CSPString sFileName;
SP_VERIFY(GetFileName(sFileName, CStock::dataReport, &(pstock->GetStockInfo())));
ReadReport(pstock, sFileName);
return pstock->GetReport().GetSize();
}
int CSelfDB::LoadMinute(CStock* pstock)
{
SP_ASSERT(m_bIsOK && pstock && pstock->GetStockInfo().IsValidStock());
if (!m_bIsOK || !pstock || !pstock->GetStockInfo().IsValidStock())
return 0;
pstock->GetMinute().RemoveAll();
CSPString sFileName;
SP_VERIFY(GetFileName(sFileName, CStock::dataMinute, &(pstock->GetStockInfo())));
ReadMinute(pstock, sFileName);
return pstock->GetMinute().GetSize();
}
int CSelfDB::LoadOutline(CStock* pstock)
{
SP_ASSERT(m_bIsOK && pstock && pstock->GetStockInfo().IsValidStock());
if (!m_bIsOK || !pstock || !pstock->GetStockInfo().IsValidStock()) return 0;
COutline & aOutline = pstock->GetOutline();
aOutline.RemoveAll();
CSPString sFileName;
SP_VERIFY(GetFileName(sFileName, CStock::dataOutline, &(pstock->GetStockInfo())));
CSPFile file;
if (file.Open(sFileName, CSPFile::modeRead))
{
OUTLINE outline;
aOutline.SetSize(aOutline.GetSize(), file.GetLength()/sizeof(outline) + 10);
while(sizeof(outline) == file.Read(&outline,sizeof(outline)))
aOutline.Add(outline);
}
return aOutline.GetSize();
}
int CSelfDB::StoreReport(REPORT* pReport, int nCount, BOOL bBigTrade)
{
SP_ASSERT(m_bIsOK && pReport && nCount > 0);
if (!m_bIsOK || !pReport || nCount <= 0)
return 0;
static BOOL bFirstCall = TRUE;
if (bFirstCall)
{
bFirstCall = FALSE;
// remove old
CSPString sRoot = GetRootPath();
CTSKFile::RemoveFileIfOutoftime(sRoot+self_sh_report, pReport->m_time);
CTSKFile::RemoveFileIfOutoftime(sRoot+self_sz_report, pReport->m_time);
}
CSPString sFileName;
CTSKFile file;
DWORD dwStoreCount = 0;
for (int i=0; i<nCount; i++)
{
CStockInfo info;
CSPString sFileNameNew;
if (!info.SetStockCode(pReport[i].m_dwMarket, pReport[i].m_szCode)
|| !GetFileName(sFileNameNew, CStock::dataReport, &info))
continue;
if (0 != sFileNameNew.Compare(sFileName))
{
sFileName = sFileNameNew;
SP_VERIFY(CTSKFile::BuildEmptyFile(sFileName, CStock::dataReport, pReport->m_dwMarket, 5000, 125, FALSE));
SP_VERIFY(file.Open(sFileName));
}
// store
if (bBigTrade)
{
dwStoreCount += file.StoreDataRecord( pReport[i].m_dwMarket, STKLIB_CODE_ZLDD,
&(pReport[i]), sizeof(REPORT), 1, FALSE);
}
else
{
dwStoreCount += file.StoreDataRecord( pReport[i].m_dwMarket, pReport[i].m_szCode,
&(pReport[i]), sizeof(REPORT), 1, FALSE);
}
}
return dwStoreCount;
}
int CSelfDB::StoreMinute(MINUTE* pMinute, int nCount)
{
SP_ASSERT(m_bIsOK && pMinute && nCount > 0);
if (!m_bIsOK || !pMinute || nCount <= 0)
return 0;
static BOOL bFirstCall = TRUE;
if (bFirstCall)
{
bFirstCall = FALSE;
CSPString sRoot = GetRootPath();
CTSKFile::RemoveFileIfOutoftime(sRoot + self_sh_minute, pMinute->m_time);
CTSKFile::RemoveFileIfOutoftime(sRoot + self_sz_minute, pMinute->m_time);
}
CSPString sFileName;
CTSKFile file;
DWORD dwStoreCount = 0;
CMinute aMinute;
for (int i = 0; i < nCount; i++)
{
CStockInfo info;
CSPString sFileNameNew;
if (!info.SetStockCode(pMinute[i].m_dwMarket, pMinute[i].m_szCode)
|| !GetFileName(sFileNameNew, CStock::dataMinute, &info))
continue;
if (sFileNameNew.Compare(sFileName) != 0)
{
sFileName = sFileNameNew;
SP_VERIFY(CTSKFile::BuildEmptyFile(sFileName, CStock::dataMinute, pMinute->m_dwMarket, 5000, 250, FALSE));
SP_VERIFY(file.Open(sFileName));
}
if (aMinute.GetSize() > 0 && (aMinute[0].m_dwMarket != pMinute[i].m_dwMarket
|| strncmp(aMinute[0].m_szCode,pMinute[i].m_szCode, sizeof(pMinute[i].m_szCode))) != 0)
{
dwStoreCount++;
file.StoreDataRecord(aMinute[0].m_dwMarket, aMinute[0].m_szCode, aMinute.GetData(), sizeof(MINUTE), aMinute.GetSize(), TRUE);
aMinute.RemoveAll();
}
aMinute.Add(pMinute[i]);
}
if (aMinute.GetSize() > 0)
{
dwStoreCount++;
file.StoreDataRecord(aMinute[0].m_dwMarket, aMinute[0].m_szCode, aMinute.GetData(), sizeof(MINUTE), aMinute.GetSize(), TRUE);
aMinute.RemoveAll();
}
return dwStoreCount;
}
int CSelfDB::StoreOutline(OUTLINE * pOutline, int nCount)
{
SP_ASSERT(m_bIsOK && pOutline && nCount > 0);
if (!m_bIsOK || !pOutline || nCount <= 0) return 0;
CSPString sFileName;
SP_VERIFY(GetFileName(sFileName,CStock::dataOutline,NULL));
CSPFile file;
if (file.Open(sFileName, CSPFile::modeCreate | CSPFile::modeWrite))
{
file.Write(pOutline, sizeof(OUTLINE)*nCount);
file.Close();
return nCount;
}
return 0;
}
BOOL CSelfDB::GetAccurateRoot(const char * rootpath, char *accurateroot, int maxlen)
{
if (0 == rootpath || strlen(rootpath)==0)
return FALSE;
// get rootpath
CSPString strRoot = rootpath;
int nLen = strRoot.GetLength();
if (strRoot[nLen-1] != '\\' && strRoot[nLen-1] != '/')
strRoot += CHAR_DIRSEP;
nLen = strRoot.GetLength();
if (0 != access(strRoot + ml_dat, 0))
return FALSE;
if (0 != access(strRoot + ml_data, 0))
return FALSE;
if (0 != access(strRoot + ml_sh, 0))
return FALSE;
if (0 != access(strRoot + ml_sh_base, 0))
return FALSE;
if (0 != access(strRoot + ml_sh_month, 0))
return FALSE;
if (0 != access(strRoot + ml_sh_week, 0))
return FALSE;
if (0 != access(strRoot + ml_sh_day, 0))
return FALSE;
if (0 != access(strRoot + ml_sh_min, 0))
return FALSE;
if (0 != access(strRoot + self_sh_xdr, 0))
return FALSE;
if (0 != access(strRoot + self_news, 0))
return FALSE;
strncpy(accurateroot, strRoot, maxlen-1);
accurateroot[maxlen-1] = '\0';
return TRUE;
}
int CSelfDB::InstallCodetbl(const char * filename, const char *orgname)
{
if (NULL == filename || strlen(filename) == 0
|| NULL == orgname || strlen(orgname) == 0)
return 0;
CSPString sFileName = GetRootPath();
CSPString sOrgName = "dat\\";
sOrgName += orgname;
if (0 == sOrgName.CompareNoCase(ml_sh_info)
|| 0 == sOrgName.CompareNoCase(ml_sz_info)
|| 0 == sOrgName.CompareNoCase(ml_sh_now)
|| 0 == sOrgName.CompareNoCase(ml_sz_now)
|| 0 == sOrgName.CompareNoCase(ml_sh_pyjc)
|| 0 == sOrgName.CompareNoCase(ml_sz_pyjc)
|| 0 == sOrgName.CompareNoCase(ml_sh_trace)
|| 0 == sOrgName.CompareNoCase(ml_sz_trace)
|| 0 == sOrgName.CompareNoCase(ml_sh_minute)
|| 0 == sOrgName.CompareNoCase(ml_sz_minute))
sFileName += ml_dat;
else
sFileName += ml_data;
sFileName += orgname;
return CSPFile::CopyFile(filename, sFileName, FALSE);
}
int CSelfDB::InstallCodetblBlock(const char * filename, const char *orgname)
{
if (NULL == filename || strlen(filename) == 0
|| NULL == orgname || strlen(orgname) == 0)
return 0;
int nRet = 0;
CDomainContainer newdomains;
if (newdomains.Load(filename))
{
nRet = AfxGetDomainContainer().AddDomainReplace(newdomains);
AfxGetDomainContainer().Store(AfxGetProfile().GetDomainFile());
}
return nRet;
}
int CSelfDB::InstallCodetblFxjBlock(const char * filename, const char *orgname)
{
if (NULL == filename || strlen(filename) == 0
|| NULL == orgname || strlen(orgname) == 0)
return 0;
CSPString sName = orgname;
int nIndex = sName.Find('.');
if (-1 != nIndex)
sName = sName.Left(nIndex);
CDomain domain;
domain.m_strName = sName;
int nRet = domain.AddFxjDomain(filename);
if (nRet > 0)
{
AfxGetDomainContainer().AddDomainReplace(domain);
}
return nRet;
}
int CSelfDB::InstallDRData(CDRData & drdata)
{
if (drdata.GetSize() <= 0)
return 0;
CSPString sFileName;
CStockInfo stockinfo;
DWORD dwMarket = drdata.ElementAt(0).m_dwMarket;
CSPString sCode = drdata.ElementAt(0).m_szCode;
stockinfo.SetStockCode(dwMarket, sCode);
if (!GetFileName(sFileName, CStock::dataDR, &stockinfo))
return 0;
int nCount = 0;
CSPFile fileTo;
if (fileTo.Open(sFileName, CSPFile::modeCreate | CSPFile::modeNoTruncate | CSPFile::modeReadWrite))
{
for (int i=0; i<drdata.GetSize(); i++)
{
CLK_DRDATA dbdrnew;
convert_DRDATA_to_CLK_DRDATA(&(drdata.ElementAt(i)), &dbdrnew);
fileTo.SeekToBegin();
CLK_DRDATA dbdr;
memset(&dbdr, 0, sizeof(dbdr));
BOOL bHas = FALSE;
BOOL bInsert = FALSE;
while(sizeof(dbdr) == fileTo.Read(&dbdr, sizeof(dbdr)))
{
if (dbdr.date == dbdrnew.date)
{
bHas = TRUE;
fileTo.Seek(fileTo.GetPosition()-sizeof(dbdr), CSPFile::begin);
break;
}
if (dbdr.date > dbdrnew.date)
{
bInsert = TRUE;
break;
}
}
if (bHas || !bInsert)
fileTo.Write(&dbdrnew, sizeof(dbdrnew));
else if (bInsert)
{
int nCur = fileTo.GetPosition();
int nLen = fileTo.GetLength();
BYTE * pbuffer = new BYTE[nLen-nCur+1];
if (pbuffer)
{
if (nLen - nCur > 0) fileTo.Read(pbuffer, nLen-nCur);
fileTo.Seek(nCur-sizeof(dbdr), CSPFile::begin);
fileTo.Write(&dbdrnew, sizeof(dbdrnew));
fileTo.Write(&dbdr, sizeof(dbdr));
if (nLen - nCur > 0) fileTo.Write(pbuffer, nLen-nCur);
delete [] pbuffer;
}
}
nCount ++;
fileTo.Flush();
}
fileTo.Close();
}
return nCount;
}
int CSelfDB::InstallDRDataClk(const char * filename, const char *orgname)
{
if (NULL == filename || strlen(filename) == 0
|| NULL == orgname || strlen(orgname) == 0)
return 0;
CSPString sFileName;
CSPString sCode = orgname;
int nIndex = sCode.Find('.');
if (-1 != nIndex)
sCode = sCode.Left(nIndex);
CStockInfo info;
info.SetStockCode(CStock::marketUnknown, sCode);
DWORD dwMarket = info.GetMarket();
CDRData drdata;
CSPFile file;
if (file.Open(filename, CSPFile::modeRead))
{
CLK_DRDATA dbdr;
while(sizeof(dbdr) == file.Read(&dbdr,sizeof(dbdr)))
{
DRDATA dr;
convert_CLK_DRDATA_to_DRDATA(dwMarket, sCode, &dbdr, &dr);
drdata.Add(dr);
}
file.Close();
}
return InstallDRData(drdata);
}
int CSelfDB::InstallDRDataFxj(const char * fxjfilename)
{
if (NULL == fxjfilename || strlen(fxjfilename) == 0)
return 0;
CSPString sFileName = GetRootPath();
sFileName += self_chna_xdr;
return CSPFile::CopyFile(fxjfilename, sFileName, FALSE);
}
int CSelfDB::InstallBasetable(const char * filename, const char * orgname)
{
if (NULL == filename || strlen(filename) == 0
|| NULL == orgname || strlen(orgname) == 0)
return 0;
CSPString sFileName = GetRootPath();
sFileName += ml_data;
sFileName += orgname;
return CSPFile::CopyFile(filename, sFileName, FALSE);
}
int CSelfDB::InstallBasetableTdx(const char * filename)
{
if (NULL == filename || strlen(filename) == 0)
return 0;
int nCount = 0;
CSPString sRoot = GetRootPath();
CSPString sFileNameSHSZ = sRoot + self_chna_basetbl;
CSPFile fileSHSZ, fileTdx;
if (fileSHSZ.Open(sFileNameSHSZ, CSPFile::modeWrite | CSPFile::modeCreate)
&& fileTdx.Open(filename, CSPFile::modeRead))
{
fileTdx.Seek(TDX_FHEADER_SIZE, CSPFile::begin);
TDX_BASEDATA tdxblock;
while(sizeof(tdxblock) == fileTdx.Read(&tdxblock, sizeof(tdxblock)))
{
BASEDATA block;
if (convert_TDX_BASEDATA_to_BASEDATA(&tdxblock, &block))
{
fileSHSZ.Write(&block, sizeof(block));
nCount ++;
}
}
}
return nCount;
}
int CSelfDB::InstallBasetableFxj(const char * filename)
{
if (NULL == filename || strlen(filename) == 0)
return 0;
DWORD dwDate = CSPTime::GetCurrentTime().ToStockTimeDay();
{
CSPString sTemp = filename;
int index1 = sTemp.ReverseFind('/');
int index2 = sTemp.ReverseFind('\\');
int index = max(index1,index2);
if (index > 0)
sTemp = sTemp.Mid(index+1);
DWORD dwTemp = atol(sTemp);
CSPTime sptime;
if (sptime.FromStockTimeDay(dwTemp))
dwDate = dwTemp;
}
int nCount = 0;
CSPString sRoot = GetRootPath();
CSPString sFileNameSHSZ = sRoot + self_chna_basetbl;
CSPFile fileSHSZ, fileFxj;
if (fileSHSZ.Open(sFileNameSHSZ, CSPFile::modeWrite | CSPFile::modeCreate)
&& fileFxj.Open(filename, CSPFile::modeRead))
{
fileFxj.Seek(FXJ_FHEADER_SIZE, CSPFile::begin);
FXJ_BASEDATA fxjblock;
while(sizeof(fxjblock) == fileFxj.Read(&fxjblock, sizeof(fxjblock)))
{
BASEDATA block;
if (convert_FXJ_BASEDATA_to_BASEDATA(&fxjblock, &block, dwDate))
{
fileSHSZ.Write(&block, sizeof(block));
nCount ++;
}
}
}
return nCount;
}
int CSelfDB::InstallNewsText(const char * filename, const char *orgname)
{
if (NULL == filename || strlen(filename) == 0
|| NULL == orgname || strlen(orgname) == 0)
return 0;
CSPString sFileName = GetRootPath();
sFileName += self_news;
sFileName += orgname;
return CSPFile::CopyFile(filename, sFileName, FALSE);
}
int CSelfDB::InstallNewsText(const char * buffer, int nLen, const char *orgname)
{
if (NULL == buffer || nLen <= 0
|| NULL == orgname || strlen(orgname) == 0)
return 0;
CSPString sFileName = GetRootPath();
sFileName += self_news;
sFileName += orgname;
CSPFile file;
if (file.Open(sFileName,CSPFile::modeWrite|CSPFile::modeCreate))
{
file.Write(buffer, nLen);
file.Close();
return 1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -