📄 qianlong.cpp.svn-base
字号:
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 + -