关于不读取相同消息的有关问题,小弟我是菜鸟,请高手们帮帮忙
关于不读取相同消息的问题,我是初学者,请高手们帮帮忙!
我在函数ReadOrderRecord中读取一个.DBD文件,文件内容很简单,如下:
000001000100 J041118AB4398 1 O
000002000100 J041118AB4398 1 O
000003000100 J041216BB4300 1 O
000001000100 J041118AB4398 1 O
000002000100 J041118AB4398 1 O
000003000100 J041118AS4398 1 O
000004000100 J041118BB4302 1 O
000005000100 J041118BS4302 1 O
000006000100 J041216BS4300 1 O
000007000100 J041216BB4300 1 O
其中,前六行是两两重复的,我想在读取时遇到重复的就不读,遇到不重复的继续读,不知道应该在源程序中怎么修改,源代码如下:
BOOL CMTIClient::ReadOrderRecord(QueryOrderRequestPacket **ppRequest, int &iCount)
{
CString strFileName;
strFileName.Format( "%s.DRD ", m_strTraderID);
CStdioFile fRecord;
if( fRecord.Open(strFileName,
CFile::modeNoTruncate
| CFile::modeRead
| CFile::typeText
| CFile::shareExclusive)==0 )
{
//AfxMessageBox( "打开文件失败 ");
return FALSE;
}
vector <QueryOrderRequestPacket> vOrderRequest;
CString strBuff;
while ( fRecord.ReadString(strBuff) )
{
QueryOrderRequestPacket order;
memset(&order, 0, sizeof(QueryOrderRequestPacket));
strcpy(order.szTraderID_, m_strTraderID);
int iOffset = 0;
strcpy(order.szOrderNo, strBuff.Mid(iOffset, SIZE_RECORD_ORDERNO));
iOffset += SIZE_RECORD_ORDERNO;
strcpy(order.szCustomerID_, strBuff.Mid(iOffset, TRADER_ID_LEN));
iOffset += TRADER_ID_LEN;
strcpy(order.szMarket, strBuff.Mid(iOffset, SIZE_RECORD_MARKETID));
iOffset += SIZE_RECORD_MARKETID;
strcpy(order.szCommodityID, strBuff.Mid(iOffset, SIZE_RECORD_COMMODITYID));
iOffset += SIZE_RECORD_COMMODITYID;
order.cBuySell = strBuff.GetAt(iOffset);
iOffset += SIZE_RECORD_BUYSELL;
vOrderRequest.push_back(order);
}
fRecord.Close();
iCount = vOrderRequest.size();
*ppRequest = new QueryOrderRequestPacket[iCount];
for (int i=0; i <iCount; i++)
{
memcpy(*ppRequest+i, &vOrderRequest.at(i), sizeof(QueryOrderRequestPacket));
}
TRACE1( "读到%d条记录\n ",iCount);
return TRUE;
}
请高手教教我,详细点儿啊,我是新手!!
------解决方案--------------------
我在函数ReadOrderRecord中读取一个.DBD文件,文件内容很简单,如下:
000001000100 J041118AB4398 1 O
000002000100 J041118AB4398 1 O
000003000100 J041216BB4300 1 O
000001000100 J041118AB4398 1 O
000002000100 J041118AB4398 1 O
000003000100 J041118AS4398 1 O
000004000100 J041118BB4302 1 O
000005000100 J041118BS4302 1 O
000006000100 J041216BS4300 1 O
000007000100 J041216BB4300 1 O
其中,前六行是两两重复的,我想在读取时遇到重复的就不读,遇到不重复的继续读,不知道应该在源程序中怎么修改,源代码如下:
BOOL CMTIClient::ReadOrderRecord(QueryOrderRequestPacket **ppRequest, int &iCount)
{
CString strFileName;
strFileName.Format( "%s.DRD ", m_strTraderID);
CStdioFile fRecord;
if( fRecord.Open(strFileName,
CFile::modeNoTruncate
| CFile::modeRead
| CFile::typeText
| CFile::shareExclusive)==0 )
{
//AfxMessageBox( "打开文件失败 ");
return FALSE;
}
vector <QueryOrderRequestPacket> vOrderRequest;
CString strBuff;
while ( fRecord.ReadString(strBuff) )
{
QueryOrderRequestPacket order;
memset(&order, 0, sizeof(QueryOrderRequestPacket));
strcpy(order.szTraderID_, m_strTraderID);
int iOffset = 0;
strcpy(order.szOrderNo, strBuff.Mid(iOffset, SIZE_RECORD_ORDERNO));
iOffset += SIZE_RECORD_ORDERNO;
strcpy(order.szCustomerID_, strBuff.Mid(iOffset, TRADER_ID_LEN));
iOffset += TRADER_ID_LEN;
strcpy(order.szMarket, strBuff.Mid(iOffset, SIZE_RECORD_MARKETID));
iOffset += SIZE_RECORD_MARKETID;
strcpy(order.szCommodityID, strBuff.Mid(iOffset, SIZE_RECORD_COMMODITYID));
iOffset += SIZE_RECORD_COMMODITYID;
order.cBuySell = strBuff.GetAt(iOffset);
iOffset += SIZE_RECORD_BUYSELL;
vOrderRequest.push_back(order);
}
fRecord.Close();
iCount = vOrderRequest.size();
*ppRequest = new QueryOrderRequestPacket[iCount];
for (int i=0; i <iCount; i++)
{
memcpy(*ppRequest+i, &vOrderRequest.at(i), sizeof(QueryOrderRequestPacket));
}
TRACE1( "读到%d条记录\n ",iCount);
return TRUE;
}
请高手教教我,详细点儿啊,我是新手!!
------解决方案--------------------