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

📄 selfdb.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
	static	BOOL	bFirstCall	=	TRUE;
	if( bFirstCall )
	{
		bFirstCall	=	FALSE;

		// remove old
		CSPString	sRoot	=	GetRootPath();
		CClkFile::RemoveFileIfOutoftime( sRoot+self_sh_minute, pMinute->m_time );
		CClkFile::RemoveFileIfOutoftime( sRoot+self_sz_minute, pMinute->m_time );
	}
	
	
	CSPString	sFileName;
	CClkFile	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( 0 != sFileNameNew.Compare( sFileName ) )
		{
			sFileName	=	sFileNameNew;
			SP_VERIFY( CClkFile::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 || 0 != strncmp(aMinute[0].m_szCode,pMinute[i].m_szCode,sizeof(pMinute[i].m_szCode))) )
		{
			dwStoreCount ++;

			// store
			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 ++;

		// store
		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;
}

BOOL CSelfDB::GetFileName( CSPString &sFileName, int nDataType,
						CStockInfo * pInfo, int nKType )
{
	if( CStock::dataOutline == nDataType )
	{
		sFileName	=	GetRootPath();
		sFileName	+=	self_outline;
		return TRUE;
	}

	if( NULL == pInfo || !pInfo->IsValidStock() )
		return FALSE;
	
	// 如果钱龙文件存在,就返回钱龙文件名(dataDR除外)
	CSPString	sFileNameQL;
	if( CStock::dataDR != nDataType
		&& CQianlong::GetFileName( sFileNameQL, nDataType, pInfo, nKType )
		&& 0 == access(sFileNameQL,0) )
	{
		sFileName	=	sFileNameQL;
		return TRUE;
	}

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

	// 如果在 ml_sh 目录下找到文件,就返回找到的文件名
	// 否则,若钱龙文件名长度大于0,就返回钱龙文件名,等于0就返回 ml_sh 下的文件名
	if( CStock::dataBasetext == nDataType )
	{
		sFileName	=	GetRootPath();
		sFileName	+=	ml_sh_base;
		sFileName	+=	CSPString(pInfo->GetStockCode()) + ml_ext_base;
		if( 0 != access(sFileName,0) && sFileNameQL.GetLength() > 0 )
			sFileName	=	sFileNameQL;
		return TRUE;
	}
	else if( CStock::dataK == nDataType )
	{
		sFileName	=	GetRootPath();
		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:
			return FALSE;
		}
		if( 0 != access(sFileName,0) && sFileNameQL.GetLength() > 0 )
			sFileName	=	sFileNameQL;
		return TRUE;
	}
	else if( CStock::dataDR == nDataType )
	{
		sFileName	=	GetRootPath();
		if( pInfo->IsShenZhen() )
			sFileName	+=	self_sz_xdr;
		else
			sFileName	+=	self_sh_xdr;
		sFileName	+=	CSPString(pInfo->GetStockCode()) + self_ext_xdr;
		if( 0 == access(sFileName,0) )
			return TRUE;

		CSPString	sTemp = GetRootPath();
		sTemp	+=	self_sh_xdr;
		sTemp	+=	CSPString(pInfo->GetStockCode()) + self_ext_xdr;
		if( 0 == access(sTemp,0) )
			sFileName	=	sTemp;
		return TRUE;
	}
	else if( CStock::dataReport == nDataType )
	{
		sFileName	=	GetRootPath();
		if( pInfo->IsShenZhen() )
			sFileName	+=	self_sz_report;
		else
			sFileName	+=	self_sh_report;
		return TRUE;
	}
	else if( CStock::dataMinute == nDataType )
	{
		sFileName	=	GetRootPath();
		if( pInfo->IsShenZhen() )
			sFileName	+=	self_sz_minute;
		else
			sFileName	+=	self_sh_minute;
		return TRUE;
	}
	return FALSE;
}

⌨️ 快捷键说明

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