📄 liesamplerecognise.cpp
字号:
}
return TRUE;
}
BOOL CLieSampleRecognise::SetAttName1(FILE* fp, int count,int *att,int atbcount)
{//有约简属性的时候读入属性名称 count:为属性个数.att为删除了的属性表;atbcount为删除了的属性个数
TRACE("set att name\n");
int i,j,k=0;
if(pAttName == NULL)
{//分配内存
try
{
pAttName = new char*[count];
}
catch(CMemoryException* e)
{
TRACE("memeory error 1\n");
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i=0;i < count;i++)
{
try
{
pAttName[i]=new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
}//end for
}//end if
for(i=0;i < count;i++)
{//
for(j=0;j<atbcount;j++)
{
if(i!=atb[j])
k++;
}
if(k==atbcount)//k不为删除了的属性
fscanf(fp,"%s",pAttName[i]);
else//否则设该属性为'*'
strcpy(pAttName[i],"*");
k=0;
}
return TRUE;
}
BOOL CLieSampleRecognise::SetDataType1(FILE *fp, int count,int *att,int atbcount)
{//设置数据类型 count:属性个数 att:删除了的属性表;atbcount:删除了的属性个数
TRACE("SetDatType\n");
int i,j,k=0;
if(pDataType == NULL)
{//分配内存
try
{
pDataType = new char*[count];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i = 0;i < count;i++)
{
try
{
pDataType[i]=new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of the memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
}//end for
}//end if
for(i=0;i < count;i++)
{
for(j=0;j<atbcount;j++)
{
if(i!=atb[j])
k++;
}
if(k==atbcount)
fscanf(fp,"%s",pDataType[i]);
else
strcpy(pDataType[i],"Float");
k=0;
}
return TRUE;
}
int CLieSampleRecognise::GetIncompletion()
{//判断是否需要补齐 需要补齐:return 1; else return 0
TRACE("GetIncompleteion\n");
for(int i = 0;i < iRecordNum;i++)
{
for(int j = 0;j < iAttNum+1;j++)
{
if(strcmp(pStringTable[i][j],"?") == 0 || strcmp(pStringTable[i][j],"*") == 0
|| strcmp(pStringTable[i][j],"-") == 0 )
return 1;
}
}
return 0;
}
int CLieSampleRecognise::GetDiscrete()
{
TRACE("GetDiscrete\n");
for(int i = 0;i < iAttNum;i++)
{
if(_stricmp(pDataType[i],"Float") == 0)
iFloat++;
if(_stricmp(pDataType[i],"Integer") == 0)
iInteger++;
if(_stricmp(pDataType[i],"String") == 0)
iChar++;
}
if(iFloat != 0 || iChar != 0)
return 1;
return 0;
}
BOOL CLieSampleRecognise::SetIntegerTable(int column, int row)
{//将整形值读入到pIntTable中 遗失值为-1;否则为对应整型
TRACE("SetInitTable\n");
// AfxMessageBox("GHJGHJLGH'JH");
int i,j;
if(pIntTable == NULL)
{
try
{
pIntTable = new int*[row];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory2!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i = 0;i < row;i++)
{
try
{
pIntTable[i] = new int[column];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory3!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
}//end for
}//end if
for(i = 0;i < row;i++)
{
for(j = 0;j < column;j++)
{
if(strcmp(pStringTable[i][j],"-") == 0)
pIntTable[i][j] = -1;
else
pIntTable[i][j] = atoi(pStringTable[i][j]);
}//end for(j)
}//end for
return TRUE;
}
BOOL CLieSampleRecognise::SetCutResult(FILE* fp)
{
TRACE("Setcutresult\n");
int n;
int iColumn;
int iCuts;
struct CutRecord* pHead = NULL;
struct CutRecord* pEnd = NULL;
char* temp = new char[MAX];
if(fscanf(fp,"%s",temp) == -1)
{//文件结束,没有断点
delete[] temp;
return FALSE;
}
if(strcmp(temp,"[Cuts]") != 0)
{
delete[] temp;
return FALSE;
}
bCuts = TRUE;
while(fscanf(fp,"%d",&iColumn) != -1)
{
fscanf(fp,"%d",&iCuts);
try
{
pEnd = new CutRecord;
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory4!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
try
{
pEnd->cpCut = new char*[iCuts];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory5!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(int i = 0;i < iCuts;i++)
{
try
{
pEnd->cpCut[i] = new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory6!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
}//end for
pEnd->iColumn = iColumn;
pEnd->iCuts = iCuts;
pEnd->p = NULL;
for(i = 0;i < iCuts;i++)
{
fscanf(fp,"%s\n",temp);
fscanf(fp,"%d\n",&n);
strcpy(pEnd->cpCut[n],temp);
}//end for
if(pHead == NULL)
{
struCutRecord = pEnd;
pHead =pEnd;
}//end if
else
{
pHead->p = pEnd;
pHead = pEnd;
pEnd = pEnd->p;
}//end else
}//end while
delete[] temp;
return TRUE;
}
BOOL CLieSampleRecognise::SetRuleTable1(FILE *fp, int column, int row,int *atb,int atbcount)
{ //从文件中读入规则到pRuleTable中 column:列数; row:行数;atb:删除了的属性表;atbcount:删除了的属性数
TRACE("SetRuleTable\n");
int i,j,k=0;
if(pRuleTable == NULL)
{
try
{
pRuleTable = new char**[row];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory6!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i = 0;i < row;i++)
{
try
{
pRuleTable[i] = new char*[column];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of Memory7!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(j = 0;j < column;j++) //column是规则数目
{
try
{
pRuleTable[i][j] = new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory7!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
strcpy(pRuleTable[i][j]," ");
}//end for
}//end for
}//end if
///先读列再读行
for(i=0;i<row;i++)
{ //读入扩充了的规则表.在删除属性处为'-';否则为文件中的属性值
for(j = 0;j<column;j++)
{
k=0;
for(int x=0;x<atbcount;x++)
{
if(j!=atb[x])
k++;
}
if(k==atbcount)
fscanf(fp,"%s",pRuleTable[i][j]);
else
strcpy(pRuleTable[i][j],"-");
}
// fscanf(fp,"\n");//添加
//outout<<endl;
}
//outout.close();
return TRUE;
}
BOOL CLieSampleRecognise::SetBlockTable1(FILE *fp, int column, int row,int *atb,int atbcount)
{//设置封锁事实表
TRACE("SetBlockTable\n");
int i,j,k=0;
if(pBlockTable == NULL)
{
try
{
pBlockTable = new char**[row];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory9!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(i = 0;i < row;i++)
{
try
{
pBlockTable[i] = new char*[column];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory10!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
for(j = 0;j < column;j++)
{
try
{
pBlockTable[i][j] = new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory11!",MB_OK|MB_ICONSTOP);
e->Delete();
return FALSE;
}
strcpy(pBlockTable[i][j]," ");
}//end for
}//end for
}//end if
for(i=0;i<row;i++)
{
for(int j=0;j<column;j++)
{
k=0;
for(int x=0;x<atbcount;x++)
{
if(j!=atb[x])
k++;
}
if(k==atbcount)
fscanf(fp,"%s",pBlockTable[i][j]);
else
strcpy(pBlockTable[i][j],"-");
}
// fscanf(fp,"\n");//添加
}
return TRUE;
}
void CLieSampleRecognise::SampleRecogniseFew()
{//少数优先策略
TRACE("sample recognise few\n");
int i,j,k;
int* temp;
int temp1 = -1;
float reliability; //reliability
int totalnum;
int coveragenum; //覆盖数
int n = 0;
int pos;
char* d;
try
{
pRecogniseResultTable = new char**[iTestNum]; //result table
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory11!",MB_OK|MB_ICONSTOP);
e->Delete();
return;
}
for(i = 0;i < iTestNum;i++)
pRecogniseResultTable[i] = new char*[2];//识别结果
for(i = 0;i < iTestNum;i++)
{
try
{
pRecogniseResultTable[i][0] = new char[MAX];
pRecogniseResultTable[i][1] = new char[MAX];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return;
}
}
try
{
d = new char[MAX];
temp = new int[iRuleNum];
}
catch(CMemoryException* e)
{
::MessageBeep(MB_ICONHAND);
AfxMessageBox("Out of memory!",MB_OK|MB_ICONSTOP);
e->Delete();
return;
}
CString tempstring;
CString trimstring;
CString compstring;
for(i = 0;i < iTestNum;i++)
{//对每个测试样本
n = 0;
bool bcollision=false;
for(j = 0;j < iRuleNum;j++)
temp[j] = 0; //initialize temp[] to zero
for(j = 0;j < iRuleNum;j++)
{//遍历每条规则,找出匹配规则
//------added by li e ,2001.6.27---------------
if ( IsRuleAttAllNull(j) )
{
/* if( IsTestAttAllNull(i) )
{
for(int xxx=0;xxx<j;xxx++)
temp[xxx]=0;
temp[j]=1;
temp1=j;
n=1;
// 此处continue已经没有意义
//因为规则集中已经不再有全为空的情况.
//而其余的规则肯定和该测试(识别)数据不匹配
}
break;
*/
temp[j]=1;//特殊,对规则全为遗失属性值的情况
temp1=j;
n++;
continue;
}
/// end li e 2001.6.27------------
for(k = 0;k < iAttNum;k++)
{//每个条件属性
if(strcmp(pRuleTable[j][k],"-") == 0
|| strcmp(pStringTable[i][k],"-") == 0)
continue;//规则为‘-且长度为1,继续该循环
tempstring = pRuleTable[j][k];//不为空的情况
if(tempstring[0] == '[' && strcmp(pDataType[k],"String")!=0 )//为连续区间
{//比较范围情况[XXX,XXX),如果在这个范围,go on,否则跳出
pos = tempstring.Find(',');
trimstring = tempstring.Left(pos);
trimstring.Remove('[');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -