miss_value.cpp

来自「某个实验事编写粗糙集智能信息处理的程序」· C++ 代码 · 共 218 行

CPP
218
字号
// Miss_Value.cpp: implementation of the Miss_Value class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "../rset.h"
#include "Miss_Value.h"
#include "fstream.h"
#include <time.h>
#include "../MissRatedlg.h"
#include "iomanip.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Miss_Value::Miss_Value()
{
    pNum=new int[2];
}

Miss_Value::~Miss_Value()
{
    for(int i=0;i<Rec_Num;i++){
		delete[] pIS[i];
	}
	delete[] pIS;
	//delete[] pDecis;
	delete[] pNum;
	for(int m=0;m<ConAttrNum+1;m++)
	{
		delete[] ConName[m];
		delete[] ConType[m];
	}
	delete[] ConType;
	delete[] ConName;
}

bool Miss_Value::InitIS(char *filename)
{
	ifstream ReadFile;
	ReadFile.open(filename,ios::in);
	
	char buf[256];
	ReadFile.getline(buf,256);
	ReadFile.getline(buf,256);
	ReadFile.getline(buf,256,':');

    ReadFile>>ConAttrNum;// 读入条件属性数目
	ReadFile.getline(buf,256,':');
    ReadFile>>Rec_Num;//读入记录数
    
	pIS=new  int * [Rec_Num];
	for(int i=0;i<Rec_Num;i++)
	{
		pIS[i]=new int [ConAttrNum];
	}
  	pDecis=new int[Rec_Num];
	ConName= new char*[ConAttrNum+1];
	ConType= new char*[ConAttrNum+1];
	for(i=0;i<ConAttrNum+1;i++)
	{
		ConName[i]=new char[20];
		ConType[i]=new char[20];
	}
	for(i=0;i<ConAttrNum+1;i++)
		ReadFile>>ConName[i];
	for(i=0;i<ConAttrNum+1;i++)
		ReadFile>>ConType[i];
    char  GetVal[6];
	for(i=0;i<Rec_Num;i++)
	{
		for(int j=0;j<ConAttrNum;j++){
		    ReadFile>>GetVal;
			if(strcmp(GetVal,"-")==0){
				pIS[i][j]=-1;
			}else{
				pIS[i][j]=atoi(GetVal);
			}
		}
		ReadFile>>pDecis[i];
	}

    ReadFile.close();

	return true;
}



bool Miss_Value::perform(char* FileNameIn,char* FileNameOut)
{
	int i,j,k;
	ifstream ReadFile;
	ReadFile.open(FileNameIn,ios::in);
	if(ReadFile==0)
	{
		::AfxMessageBox("File Open error!");
		return false;
	}
	
	char buf[256];
	ReadFile.getline(buf,256,':');
	ReadFile>>Style;
	ReadFile.getline(buf,256,':');
	ReadFile>>Stage;
	ReadFile.getline(buf,256,':');

    ReadFile>>ConAttrNum;// 读入条件属性数目
	ReadFile.getline(buf,256,':');
    ReadFile>>Rec_Num;//读入记录数
 	pIS=new  int * [Rec_Num];
	for(i=0;i<Rec_Num;i++)
	{
		pIS[i]=new int [ConAttrNum];
		for(int k=0;k<ConAttrNum;k++)
			pIS[i][k]=0;
	}
 //	pDecis=new int[Rec_Num];//决策值
	ConName= new char*[ConAttrNum+1];
	ConType= new char*[ConAttrNum+1];
	for(i=0;i<ConAttrNum+1;i++)
	{
		ConName[i]=new char[20];
		ConType[i]=new char[20];
	}
	for(i=0;i<ConAttrNum+1;i++)
		ReadFile>>ConName[i];
	for(i=0;i<ConAttrNum+1;i++)
		ReadFile>>ConType[i];
	float MissRate;
	if (! GetMissRate(&MissRate) )
		return false;
	
	int SumValue=Rec_Num*ConAttrNum;
	int MissValue=int(SumValue*MissRate );
	
	srand(unsigned (time(NULL)));
// the value of rand() is different every time when you run the programer

	for(k=0;k<MissValue;k++){
        i=int((float(rand())/float(RAND_MAX))*(Rec_Num));
        j=int((float(rand())/float(RAND_MAX))*(ConAttrNum));
        pIS[i][j]=-1;
	}
    fstream WriteFile; 
	WriteFile.open(FileNameOut,ios::out);
	if(!WriteFile)
	{
		::AfxMessageBox("File Open error!");
		return false;
	}
	WriteFile<<"Style:train"<<endl;
   	WriteFile<<"Stage:0"<<endl;
   	WriteFile<<"Condition attributes number:";
	WriteFile<<ConAttrNum<<endl;
	WriteFile<<"Records number:";
	WriteFile<<Rec_Num<<endl;

	for(i=0;i<ConAttrNum;i++)	//写属性名称
		WriteFile<<ConName[i]<<' ';
	WriteFile<<ConName[ConAttrNum]<<'\n';

	for(i=0;i<ConAttrNum;i++)	//写数据类型
		WriteFile<<ConType[i]<<' ';
	WriteFile<<ConType[ConAttrNum]<<'\n';

	for(i=0;i<Rec_Num;i++)
	{
		for(j=0;j<ConAttrNum;j++){
   			char *aa=new char[20];
			ReadFile>>aa;
			if(pIS[i][j]==-1)
				WriteFile<<'-'<<"  ";
			else{
	//	  	if ((0==stricmp(ConType[j],"Float"))||
	//			(0==stricmp(ConType[j],"String")))
				WriteFile<<aa<<"  ";
	//		else if(0==stricmp(ConType[j],"Integer"))
	//				WriteFile<<aa<<"  ";
			delete []aa;
			}
		}
		char *aa=new char[20];
		ReadFile>>aa;
		WriteFile<<"  "<<aa;
	    delete[] aa;
		WriteFile<<endl;
	}
	ReadFile.getline(buf,256);
	//cuts
	while(! ReadFile.eof())
	{
		ReadFile.getline(buf,256);
		WriteFile<<buf<<endl;
	}
	ReadFile.close();
    WriteFile.close();
	return true;
}

bool Miss_Value::GetMissRate(float* missrate)
{
	CMissRateDlg dlg;
	if(dlg.DoModal()==IDOK)
	{
		*missrate=dlg.m_fRate;
		return true;
	}
	else 
		return false;
}

⌨️ 快捷键说明

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