📄 dataset.cpp
字号:
#include "StdAfx.h"
#include ".\dataset.h"
CDataSet::CDataSet(void)
{
m_nClasses = 0;
m_nDimension = 0;
}
CDataSet::CDataSet(DWORD nSize, int nDimensions)
{
ASSERT(nSize >= 0);
m_nClasses = 0;
SetSize(nSize, nDimensions);
}
CDataSet::~CDataSet(void)
{
Clear();
}
void CDataSet::Clear()
{
//释放数据占用的空间
for(DWORD i=0; i<m_DataItems.size(); i++)
{
delete m_DataItems[i];
}
m_DataItems.clear();
}
//从数据文件加载
bool CDataSet::Load(CString& sDataFile)
{
FILE *in = fopen(sDataFile, "rt");
if (!in)
{
TRACE("Open data file fail: %s\n", sDataFile);
return false;
}
Clear();
char sLine[10240];
CDataItem *pItem;
int maxClassId = 0;
do
{
fgets(sLine, 10240, in); //取一行数据
pItem = new CDataItem; //新分配一个CDataItem对象
pItem->FromString(sLine);
if (m_nDimension == 0) //以第一项数据的维数作为数据集的标准维数
m_nDimension = pItem->Dimension();
if (pItem->Dimension() != m_nDimension) //数据向的维数不等于标准维数--非法数据
delete pItem;
else
{
m_DataItems.push_back(pItem); //保存该数据项
if (maxClassId < pItem->ClassID())
maxClassId = pItem->ClassID();
}
} while(!feof(in));
m_nClasses = maxClassId+1; //classId从0开始编号
fclose(in);
return true;
}
//保存数据到文件
bool CDataSet::Save(CString& sDataFile)
{
FILE *out = fopen(sDataFile, "w+t");
if (!out)
{
TRACE("Create or open file error: %s\n", sDataFile);
return false;
}
DWORD i;
CString sDataLine;
for (i=0; i<Count(); i++)
{
sDataLine = m_DataItems[i]->ToString();
fputs(sDataLine + "\n", out);
}
fclose(out);
return true;
}
CDataItem& CDataSet::operator [] (DWORD nIndex)
{
return *m_DataItems.at(nIndex);
}
void CDataSet::SetSize(DWORD nSize, int nDimension)
{
m_nDimension = nDimension;
if (nSize == 0)
m_DataItems.resize(0);
for(DWORD i=0; i<nSize; i++)
m_DataItems.push_back(new CDataItem(nDimension));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -