📄 zssscaler.cpp
字号:
// ZssScaler.cpp: implementation of the CZssScaler class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ZssScaler.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CZssScaler::CZssScaler()
{
}
CZssScaler::~CZssScaler()
{
}
//写入离散化的结果
void CZssScaler::WriteResult(FILE *pwritefile, FILE *preadfile,fpos_t filepos,
CArray<float,float> *parray_nonstr, CStringArray *parray_str)
{
fsetpos(preadfile, &filepos);
int i_indexstr=-1,i_indexnon=-1;
char str_temp[ZSSLEN];
CString str1;
CWordArray str_array,nonstr_array;
str_array.SetSize(m_iConAttrNum);
nonstr_array.SetSize(m_iConAttrNum);
for (int i=0;i<m_iConAttrNum; i++)
{
if (stricmp("String", m_AttrType[i])==0)
{
i_indexstr++;
str_array[i]=i_indexstr;
}
else
{
i_indexnon++;
nonstr_array[i]=i_indexnon;
}
}
int i_result;
float f_temp;
//根据离散化的数据写文件
for(long l_i=0; l_i<m_iRecordNum; l_i++)
{
for(i=0; i<m_iConAttrNum; i++)
{
fscanf(preadfile,"%s",str_temp);
if (0==stricmp("String", m_AttrType[i]))
{
//i_result为字符串str_temp的离散化值
i_result=GetIndex(str_temp,parray_str[str_array[i]]);
fprintf(pwritefile,"%-7d",i_result);
}
else
{
f_temp=(float)(atof(str_temp));
i_result=GetPosition(f_temp,parray_nonstr[nonstr_array[i]]);
fprintf(pwritefile,"%-7d",i_result);
}
}
fscanf(preadfile,"%s",str_temp);
fprintf(pwritefile,"%-7s\n",str_temp);
}
}
//写断点的信息
void CZssScaler::WriteFileTail(FILE *pfile, CArray<float,float> *parray_nonstr, CStringArray *parray_str)
{
fprintf(pfile,"[Cuts]\n");
int i_strcount=-1,i_nonstrcount=-1,i_len,j;
for(int i=0; i<m_iConAttrNum; i++)
{
if(stricmp("String", m_AttrType[i])==0)
{
i_strcount++;
CStringArray &array1=parray_str[i_strcount];
i_len=array1.GetSize();
fprintf(pfile,"%d\n%d\n",i,i_len);
for(j=0; j<i_len; j++)
fprintf(pfile,"%s %d\n",array1[j], j);
}
else
{
i_nonstrcount++;
CArray<float,float> &array=parray_nonstr[i_nonstrcount];
i_len=array.GetSize();//断点数目
fprintf(pfile, "%d\n%d\n[*,",i,i_len+1);//区域个数
if (i_len==1)
fprintf(pfile,"%.5f] %d\n(%.5f,",array[0],0,array[0]);
else
for (j=0; j<i_len; j++)
{
fprintf(pfile,"%.5f) %d\n[%.5f,",array[j],j,array[j]);
}
fprintf(pfile,"*] %d\n",i_len);
}
}
}
//得到字符串条件属性的断点信息
void CZssScaler::GetBreakPoint_InStrAttr(FILE *pfile,
int i_attr, CStringArray &str_array, fpos_t file_pos)
{
fsetpos(pfile, &file_pos);
char str_temp[ZSSLEN];
str_array.RemoveAll();
MoveFilePoint(pfile, i_attr);//移动文件指针
for(long i=0; i<m_iRecordNum; i++)
{
fscanf(pfile,"%s",str_temp);
if(!IsStringInStringArray(str_temp,str_array))
str_array.Add(str_temp);
MoveFilePoint(pfile,m_iConAttrNum);
}
}
/*寻找一个字符串在字符串数组总的位置
输入参数: str:字符串
-----------array:字符串数组*/
int CZssScaler::GetIndex(CString str, CStringArray &array)
{
int size,i;
size=array.GetSize();
for(i=0;i<size;i++)
{
if (strcmp(str,array[i])==0)
return i;
}
return -1;//没有找到
}
//计算一个浮点数f_temp在一个浮点数数组中的位置
int CZssScaler::GetPosition(float f_temp, CArray<float,float> &array)
{
int i_len=array.GetSize();
for(int i=0; i<i_len; i++)
{
if (f_temp<array[i])
return i;
}
return i_len;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -