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

📄 selfdb.cpp

📁 股软 通达信行情接收接口, 包括美元汇率
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	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 + -