我在函数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;
}
请高手教教我,详细点儿啊,我是新手!!
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;
}
请高手教教我,详细点儿啊,我是新手!!
{
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;
//修改处
CPtrArray strList;
bool Tag=false;
while ( fRecord.ReadString(strBuff) )
{//修改处
for(int i=0;i<strList.GetSize();i++)
{
if(strcmp(strBuff,strList.GetAt(i))==0)
Tag=true;
}
if(Tag)
{
Tag=false;
continue;
}
______________________________________________
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;
}
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;
//修改处
CPtrArray strList;
bool Tag=false;
while ( fRecord.ReadString(strBuff) )
{//修改处
for(int i=0;i<strList.GetSize();i++)
{
if(strcmp(strBuff,strList.GetAt(i))==0)
Tag=true;
}
if(Tag)
{
Tag=false;
continue;
}
strList.Add(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;
}
1.error C2664: 'strcmp' : cannot convert parameter 2 from 'void *' to 'const char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
错误指向语句:
if(strcmp(strBuff,strList.GetAt(i))==0)
2.error C2664: 'Add' : cannot convert parameter 1 from 'class CString' to 'void *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
错误指向语句:
strList.Add(strBuff);请问现在应该怎么改?谢谢
改成CStringArray