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

📄 qianlong.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
	CSPString	sCode		=	kdata.ElementAt(0).m_szCode;

	stockinfo.SetStockCode( dwMarket, sCode );
	if( !GetFileName( sFileName, CStock::dataK, &stockinfo, kdata.GetKType() ) )
		return 0;
	
	if( CKData::IsDayOrMin(kdata.GetKType()) )
	{
		if( fileTo.Open( sFileName, nOpenFlags ) )
		{
			for( int i=0; i<kdata.GetSize(); i++ )
			{
				struct QL_Data_day	qlkdnew;
				convert_KDATA_to_QL_Data_day( &(kdata.ElementAt(i)), &qlkdnew );

				struct QL_Data_day	qlkd;
				memset( &qlkd, 0, sizeof(qlkd) );
				BOOL	bHas	=	FALSE;
				BOOL	bInsert	=	FALSE;
				while( sizeof(qlkd) == fileTo.Read( &qlkd, sizeof(qlkd) ) )
				{
					if( qlkd.day_date == qlkdnew.day_date )
					{
						bHas	=	TRUE;
						fileTo.Seek( fileTo.GetPosition()-sizeof(qlkd), CSPFile::begin );
						break;
					}
					if( qlkd.day_date > qlkdnew.day_date )
					{
						bInsert	=	TRUE;
						break;
					}
				}
				if( bHas || !bInsert )
					fileTo.Write( &qlkdnew, sizeof(qlkdnew) );
				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(qlkd), CSPFile::begin );
						fileTo.Write( &qlkdnew, sizeof(qlkdnew) );
						fileTo.Write( &qlkd, sizeof(qlkd) );
						if( nLen - nCur > 0 )	fileTo.Write( pbuffer, nLen-nCur );
						delete [] pbuffer;
					}
					fileTo.Seek( nCur, CSPFile::begin );
				}
				nCount	++;
			}
		}
	}
	else
	{
		if( fileTo.Open( sFileName, nOpenFlags ) )
		{
			for( int i=0; i<kdata.GetSize(); i++ )
			{
				struct QL_Data_5min	qlkdnew;
				convert_KDATA_to_QL_Data_5min( &(kdata.ElementAt(i)), &qlkdnew );

				struct QL_Data_5min	qlkd;
				memset( &qlkd, 0, sizeof(qlkd) );
				BOOL	bHas	=	FALSE;
				BOOL	bInsert	=	FALSE;
				while( sizeof(qlkd) == fileTo.Read( &qlkd, sizeof(qlkd) ) )
				{
					if( qlkd.min_off == qlkdnew.min_off )
					{
						bHas	=	TRUE;
						fileTo.Seek( fileTo.GetPosition()-sizeof(qlkd), CSPFile::begin );
						break;
					}
					if( qlkd.min_off > qlkdnew.min_off )
					{
						bInsert	=	TRUE;
						break;
					}
				}
				if( bHas || !bInsert )
					fileTo.Write( &qlkdnew, sizeof(qlkdnew) );
				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(qlkd), CSPFile::begin );
						fileTo.Write( &qlkdnew, sizeof(qlkdnew) );
						fileTo.Write( &qlkd, sizeof(qlkd) );
						if( nLen - nCur > 0 )	fileTo.Write( pbuffer, nLen-nCur );
						delete [] pbuffer;
					}
					fileTo.Seek( nCur, CSPFile::begin );
				}
				nCount	++;
			}
		}
	}

	return nCount;
}

int CQianlong::InstallKDataTy( const char * stkfile, int nKType,
							PROGRESS_CALLBACK fnCallback, void *cookie )
{
	if( NULL == stkfile || strlen(stkfile) == 0 )
		return 0;

	int	nTotalRecordCount	=	0;
	int	nProgCount	=	0;
	int	nCount		=	0;

	CSPFile	file;
	if( file.Open( stkfile, CSPFile::modeRead ) )
	{
		TYDAY_FHEADER	header;
		if( sizeof(header) == file.Read(&header,sizeof(header)) )
		{
			nTotalRecordCount	=	header.recordcount;
			TYDAY_RECORD	block;
			CKData			kdata( nKType );
			CSPString		sCurCode;
			while( sizeof(block) == file.Read(&block,sizeof(block)) )
			{
				nProgCount	++;
				if( fnCallback && nTotalRecordCount > 0 )
					fnCallback( PROG_PROGRESS, DWORD(STKLIB_MAXF_PROGRESS*nProgCount/nTotalRecordCount), NULL, cookie );

				KDATA	kdnew;
				if( CKData::IsDayOrMin(nKType) )
					convert_TYDAY_RECORD_to_KDATA( &block, &kdnew );
				else
					convert_TYDAY_RECORD_MIN_to_KDATA( &block, &kdnew );

				if( sCurCode.IsEmpty() )
					sCurCode	=	kdnew.m_szCode;

				if( 0 == strcmp(kdnew.m_szCode,sCurCode) )
					kdata.Add( kdnew );
				else
				{
					nCount +=	InstallKData( kdata );
					kdata.RemoveAll();

					kdata.Add( kdnew );
					sCurCode	=	kdnew.m_szCode;
				}
			}
			
			if( kdata.GetSize() > 0 )
			{
				nCount +=	InstallKData( kdata );
				kdata.RemoveAll();
			}
		}
		file.Close();
	}

	if( fnCallback )
		fnCallback( PROG_PROGRESS, STKLIB_MAX_PROGRESS, NULL, cookie );

	return nCount;
}

int CQianlong::InstallKDataFxj( const char * dadfile, int nKType,
							PROGRESS_CALLBACK fnCallback, void *cookie )
{
	if( NULL == dadfile || strlen(dadfile) == 0 )
		return 0;

	int	nTotalStockCount	=	0;
	int	nProgCount	=	0;
	int	nCount		=	0;

	CSPFile	file;
	if( file.Open( dadfile, CSPFile::modeRead ) )
	{
		FXJDAY_FHEADER	header;
		if( sizeof(header) == file.Read(&header,sizeof(header)) )
		{
			nTotalStockCount	=	header.m_dwStockCount;
			FXJDAY_RECORD	block;
			CKData			kdata( nKType );
			DWORD			dwMarket = CStock::marketUnknown;
			CSPString		sCurCode;
			while( sizeof(block) == file.Read(&block,sizeof(block)) )
			{
				if( -1 == block.m_dwMagic )
				{
					if( kdata.GetSize() > 0 )
						nCount +=	InstallKData( kdata );
					kdata.RemoveAll();

					if( 'HS' == block.m_wMarket )
						dwMarket = CStock::marketSHSE;
					else if( 'ZS' == block.m_wMarket )
						dwMarket = CStock::marketSZSE;
					else
						dwMarket = CStock::marketUnknown;

					char	code[sizeof(block.m_szCode)+2];
					memset( code, 0, sizeof(code) );
					strncpy( code, block.m_szCode, min(sizeof(code)-1,sizeof(block.m_szCode)) );
					sCurCode	=	code;

					nProgCount	++;
					if( fnCallback && nTotalStockCount > 0 )
						fnCallback( PROG_PROGRESS, DWORD(STKLIB_MAXF_PROGRESS*nProgCount/nTotalStockCount), NULL, cookie );
				}
				else
				{
					KDATA	kdnew;
					if( convert_FXJDAY_RECORD_to_KDATA( dwMarket, sCurCode, nKType, &block, &kdnew ) )
						kdata.Add( kdnew );
				}
			}
			
			if( kdata.GetSize() > 0 )
			{
				nCount +=	InstallKData( kdata );
				kdata.RemoveAll();
			}
		}
		file.Close();
	}

	if( fnCallback )
		fnCallback( PROG_PROGRESS, STKLIB_MAX_PROGRESS, NULL, cookie );

	return nCount;
}

int CQianlong::InstallDRData( CDRData & drdata )
{
	SP_ASSERT( FALSE );
	return 0;
}

int CQianlong::InstallDRDataClk( const char * filename, const char *orgname )
{
	SP_ASSERT( FALSE );
	return 0;
}

int CQianlong::InstallDRDataFxj( const char * fxjfilename )
{
	SP_ASSERT( FALSE );
	return 0;
}

int CQianlong::InstallBasetable( const char * filename, const char * orgname )
{
	SP_ASSERT( FALSE );
	return 0;
}

int CQianlong::InstallBasetableTdx( const char * filename )
{
	SP_ASSERT( FALSE );
	return 0;
}

int CQianlong::InstallBasetableFxj( const char * filename )
{
	SP_ASSERT( FALSE );
	return 0;
}

int CQianlong::InstallBaseText( const char * filename, const char *orgname )
{
	if( NULL == filename || strlen(filename) == 0
		|| NULL == orgname || strlen(orgname) == 0 )
		return 0;

	CSPString	sCode	=	orgname;
	int nIndex = sCode.Find( '.' );
	if( -1 != nIndex )
	{
		sCode	=	sCode.Left(nIndex);
		CStockInfo	stockinfo;
		stockinfo.SetStockCode( CStock::marketUnknown, sCode );
		CSPString	sFileName;
		if( GetFileName( sFileName, CStock::dataBasetext, &stockinfo ) )
		{
			return CSPFile::CopyFile( filename, sFileName, FALSE );
		}
	}
	
	return 0;
}

int CQianlong::InstallBaseText( const char * buffer, int nLen, const char *orgname )
{
	if( NULL == buffer || nLen <= 0
		|| NULL == orgname || strlen(orgname) == 0 )
		return 0;

	CSPString	sCode	=	orgname;
	int nIndex = sCode.Find( '.' );
	if( -1 != nIndex )
	{
		sCode	=	sCode.Left(nIndex);
		CStockInfo	stockinfo;
		stockinfo.SetStockCode( CStock::marketUnknown, sCode );
		CSPString	sFileName;
		CSPFile		file;
		if( GetFileName( sFileName, CStock::dataBasetext, &stockinfo )
			&& file.Open(sFileName,CSPFile::modeWrite|CSPFile::modeCreate) )
		{
			file.Write( buffer, nLen );
			file.Close();
			return 1;
		}
	}
	
	return 0;
}

int CQianlong::InstallNewsText( const char * filename, const char *orgname )
{
	SP_ASSERT( FALSE );
	return 0;
}

int CQianlong::InstallNewsText( const char * buffer, int nLen, const char *orgname )
{
	SP_ASSERT( FALSE );
	return 0;
}

BOOL CQianlong::GetFileName( CSPString &sFileName, int nDataType,
						CStockInfo * pInfo, int nKType )
{
	if( NULL == pInfo || !pInfo->IsValidStock() )
		return FALSE;

	// 确定市场类型
	if( CStock::marketUnknown == pInfo->GetMarket() )
		pInfo->ResolveTypeAndMarket( );

	if( CStock::dataBasetext == nDataType )
	{
		sFileName	=	GetRootPath();
		if( pInfo->IsShenZhen() )
			sFileName	+=	ml_sz_base;
		else
			sFileName	+=	ml_sh_base;
		sFileName	+=	CSPString(pInfo->GetStockCode()) + ml_ext_base;
		return TRUE;
	}
	else if( CStock::dataK == nDataType )
	{
		sFileName	=	GetRootPath();
		if( pInfo->IsShenZhen() )
			sFileName	+=	ml_sz;
		else
			sFileName	+=	ml_sh;
			
		switch( nKType )
		{
		case CKData::ktypeMonth:
			sFileName	+=	CSPString(ml_month) + pInfo->GetStockCode() + ml_ext_month;
			break;
		case CKData::ktypeWeek:
			sFileName	+=	CSPString(ml_week) + pInfo->GetStockCode() + ml_ext_week;
			break;
		case CKData::ktypeDay:
			sFileName	+=	CSPString(ml_day) + pInfo->GetStockCode() + ml_ext_day;
			break;
		case CKData::ktypeMin60:
			return	FALSE;
		case CKData::ktypeMin30:
			return	FALSE;
		case CKData::ktypeMin15:
			return	FALSE;
		case CKData::ktypeMin5:
			sFileName	+=	CSPString(ml_min5) + pInfo->GetStockCode() + ml_ext_min5;
			break;
		default:
			SP_ASSERT( FALSE );
			return FALSE;
		}
		return TRUE;
	}
	else if( CStock::dataDR == nDataType )
	{
		return FALSE;
	}

	return FALSE;
}

⌨️ 快捷键说明

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