#include "Inc.hpp"
//----------------------------------------------------------------
//FieldInfoSet 클래스 함수들
//----------------------------------------------------------------
FieldInfoSet::FieldInfoSet()
{
FieldNumTot = 0;
FieldNumOrg = 0;
FieldNumGrp = 0;
FieldNumCur = 0;
FieldNumMax = 500;
FieldName = new char* [FieldNumMax];
OrgWriteYN = new bool [FieldNumMax];
GrpWriteYN = new bool [FieldNumMax];
CalcYN = new bool [FieldNumMax];
MappingOrg = new long [FieldNumMax];
MappingGrp = new long [FieldNumMax];
MappingCur = new long [FieldNumMax];
for (int j=0; j<FieldNumMax; j++)
{
FieldName[j] = new char[50]; strcpy(FieldName[j], "");
OrgWriteYN[j] = false;
GrpWriteYN[j] = false;
CalcYN[j] = false;
MappingOrg[j] = 999;
MappingGrp[j] = 999;
MappingCur[j] = 999;
}
return;
}
FieldInfoSet::~FieldInfoSet()
{
for (int j=0; j<FieldNumMax; j++)
{
delete [] FieldName[j];
}
delete [] FieldName;
delete [] OrgWriteYN;
delete [] GrpWriteYN;
delete [] CalcYN;
delete [] MappingOrg;
delete [] MappingGrp;
delete [] MappingCur;
return;
}
void FieldInfoSet::Init(char* path_label, char* grptype)
{
char rec[1000];
char imsi[1000];
long i; long nlen; long slen; long elen;
char* pch;
strcpy(this->GrpType, grptype);
//필드목록 open
OUTLABEL.open(path_label, ifstream::in);
if (OUTLABEL==NULL)
{
gLogFile << "Error : Label File missing !!! : " << path_label << endl;
cout << "Error : Label File missing !!! : " << path_label << endl;
system("PAUSE"); exit(0);
}
//필드목록을 읽어들여 필드목록 배열에 저장
while(1)
{
OUTLABEL.getline(rec,100,'\n');
if (OUTLABEL.eof()==true) break;
if (strlen(rec)==0) break;
//trim 작업
nlen = strlen(rec);
for (i=0; i<nlen; i++)
{
if (rec[i]!=' ' && rec[i]!='\t')
{
slen = i;
break;
}
}
for (i=nlen-1; i>=0; i--)
{
if (rec[i]!=' ' && rec[i]!='\t')
{
elen = i;
rec[elen+1] = '\0';
break;
}
}
strcpy(imsi, &rec[slen]);
strcpy(FieldName[FieldNumTot],imsi);
OrgWriteYN[FieldNumTot] = true;
MappingOrg[FieldNumTot] = FieldNumTot;
if (imsi[0]=='*')
{
strcpy(FieldName[FieldNumTot],&imsi[1]);
GrpWriteYN[FieldNumTot] = true;
MappingGrp[FieldNumGrp] = FieldNumTot;
FieldNumGrp ++;
}
//레이블이 겹치면 레이블에 "_DUP?" 을 덧붙여줌
for (int i=0; i<FieldNumOrg-1; i++)
{
if (strcmp(FieldName[FieldNumTot], FieldName[i])==0)
{
strcat(FieldName[FieldNumTot],"_DUP?");
break;
}
}
FieldNumTot ++;
FieldNumOrg ++;
}
OUTLABEL.close();
//결과 그룹핑 타입이 "EV"인 경우는 summary 출력파일의 필드 갯수, 필드 이름등 Hard coding
this->HardCoding();
return;
}
void FieldInfoSet::CurFile(char* rec)
{
char buffer[100], fieldname[FieldNumMax][50];
long mm,nn=0;
char* pch;
FieldNumCur = 0;
for (int j=0; j<FieldNumMax; j++) {strcpy(fieldname[j], "");}
for (mm=0; mm<1000; mm++){ if (rec[mm] == '"') break; }
pch = strtok(&rec[mm], "\"");
strcpy(fieldname[0], pch);
for (int m=1; m<FieldNumMax; m++)
{
pch = strtok(NULL, "\""); if (pch==0) break;
pch = strtok(NULL, "\"");
strcpy(fieldname[m], pch);
}
//동일한 필드명이 존재할 때, 일련번호를 추가해 줌
nn=0;
for (int m=0; m<FieldNumMax-1; m++)
{
if (strcmp(fieldname[m], fieldname[m+1])==0)
{
if (nn>0 && strcmp(fieldname[m], "")!=0)
{
itoa(nn,buffer,10);
strcat(fieldname[m-1], "_");
strcat(fieldname[m-1], buffer);
}
nn++;
}
else
{
if (nn>0 && strcmp(fieldname[m], "")!=0)
{
itoa(nn,buffer,10);
strcat(fieldname[m-1], "_");
strcat(fieldname[m-1], buffer);
itoa(nn+1,buffer,10);
strcat(fieldname[m], "_");
strcat(fieldname[m], buffer);
}
nn=0;
}
if (m>0 && strcmp(fieldname[m], "")==0) break;
FieldNumCur++;
} //for (int m=0; m<FieldMaxNum-1; m++)
//읽어들인 필드별로 출력파일의 동일필드 순번 매칭
for (int m=0; m<FieldNumCur; m++)
{
for (int j=0; j<FieldNumTot; j++)
{
if (strcmp(fieldname[m], FieldName[j])==0)
{
MappingCur[m] = j;
break;
}
}
}
return;
}
void FieldInfoSet::HardCoding()
{
if (strcmp(GrpType, "EV")!=0) return; //결과 그룹핑 타입이 "EV"가 아닌 경우는 그냥 pass
//Label에서 얻은 필드정보 수정
for (int i=0; i<FieldNumOrg; i++)
{
GrpWriteYN[i] = false;
CalcYN[i] = false;
}
//Label에서 얻은 필드정보 수정
for (int i=0; i<FieldNumGrp; i++)
{
MappingGrp[i] = 999;
}
//필드정보 수정 다시 입력
this->FieldNumGrp = 117;
this->FieldNumTot = FieldNumOrg + FieldNumGrp;
for (int i=0; i<FieldNumGrp; i++)
{
GrpWriteYN[FieldNumOrg+i] = true;
CalcYN[FieldNumOrg+i] = true;
MappingGrp[i] = FieldNumOrg+i;
}
long mm = FieldNumOrg;
strcpy(FieldName[mm], "gen_prem"); mm++;
strcpy(FieldName[mm], "tot_ben"); mm++;
strcpy(FieldName[mm], "tot_exp"); mm++;
strcpy(FieldName[mm], "etc_inc"); mm++;
strcpy(FieldName[mm], "etc_out"); mm++;
strcpy(FieldName[mm], "o_taxbl_inc"); mm++;
strcpy(FieldName[mm], "res_inc"); mm++;
strcpy(FieldName[mm], "gyelsan"); mm++;
strcpy(FieldName[mm], "ewon"); mm++;
strcpy(FieldName[mm], "e_cha "); mm++;
strcpy(FieldName[mm], "o_taxbl_inc"); mm++;
strcpy(FieldName[mm], "cred_need"); mm++;
strcpy(FieldName[mm], "b_cha "); mm++;
strcpy(FieldName[mm], "alpha_load_if"); mm++;
strcpy(FieldName[mm], "beta_load_if"); mm++;
strcpy(FieldName[mm], "gamma_load_if"); mm++;
strcpy(FieldName[mm], "tot_alpha_exp"); mm++;
strcpy(FieldName[mm], "tot_beta_exp"); mm++;
strcpy(FieldName[mm], "tot_gamma_exp"); mm++;
strcpy(FieldName[mm], "dac_diff_inc"); mm++;
strcpy(FieldName[mm], "sa_cha "); mm++;
strcpy(FieldName[mm], "risk_prem_sb_if"); mm++;
strcpy(FieldName[mm], "sa_outgo"); mm++;
strcpy(FieldName[mm], "etc_cha "); mm++;
strcpy(FieldName[mm], "fmf_inc"); mm++;
strcpy(FieldName[mm], "fmf_out"); mm++;
strcpy(FieldName[mm], "other_exp"); mm++;
strcpy(FieldName[mm], "diff"); mm++;
strcpy(FieldName[mm], "s_gyelsan"); mm++;
strcpy(FieldName[mm], "s_ewon"); mm++;
strcpy(FieldName[mm], "s_e_cha"); mm++;
strcpy(FieldName[mm], "s_b_cha"); mm++;
strcpy(FieldName[mm], "s_sa_cha "); mm++;
strcpy(FieldName[mm], "s_etc_cha "); mm++;
strcpy(FieldName[mm], "prem_1st_m"); mm++;
strcpy(FieldName[mm], "prem_1st_s"); mm++;
strcpy(FieldName[mm], "prem_inc"); mm++;
strcpy(FieldName[mm], "inforcepol"); mm++;
strcpy(FieldName[mm], "inforcepol_tk"); mm++;
strcpy(FieldName[mm], "no_new_pols"); mm++;
strcpy(FieldName[mm], "res_p"); mm++;
strcpy(FieldName[mm], "res_w"); mm++;
strcpy(FieldName[mm], "sep_res_p"); mm++;
strcpy(FieldName[mm], "sep_res_w"); mm++;
strcpy(FieldName[mm], "gmdb_inc_if"); mm++;
strcpy(FieldName[mm], "gmab_inc_if"); mm++;
strcpy(FieldName[mm], "gmdb_incti_if"); mm++;
strcpy(FieldName[mm], "gmsb_incti_if"); mm++;
strcpy(FieldName[mm], "gmdb_out_if"); mm++;
strcpy(FieldName[mm], "gmab_out_if"); mm++;
strcpy(FieldName[mm], "gmdb_outti_if"); mm++;
strcpy(FieldName[mm], "gmsb_outti_if"); mm++;
strcpy(FieldName[mm], "gmdb_res_if"); mm++;
strcpy(FieldName[mm], "gmab_res_if"); mm++;
strcpy(FieldName[mm], "gmsb_resti_if"); mm++;
strcpy(FieldName[mm], "gmdb_resti_if"); mm++;
strcpy(FieldName[mm], "Commission_Expense_Total"); mm++;
strcpy(FieldName[mm], "Acquisition_Expense_Total"); mm++;
strcpy(FieldName[mm], "Maintenance_Expense_Total"); mm++;
strcpy(FieldName[mm], "Collection_Expense"); mm++;
strcpy(FieldName[mm], "Other_Expenses"); mm++;
strcpy(FieldName[mm], "death_risk_prem"); mm++;
strcpy(FieldName[mm], "disbl_risk_prem"); mm++;
strcpy(FieldName[mm], "diag_risk_prem"); mm++;
strcpy(FieldName[mm], "surg_risk_prem"); mm++;
strcpy(FieldName[mm], "hosp_risk_prem"); mm++;
strcpy(FieldName[mm], "oth_risk_prem"); mm++;
strcpy(FieldName[mm], "death_outgo"); mm++;
strcpy(FieldName[mm], "disbl_outgo"); mm++;
strcpy(FieldName[mm], "diag_outgo"); mm++;
strcpy(FieldName[mm], "surg_outgo "); mm++;
strcpy(FieldName[mm], "hosp_outgo "); mm++;
strcpy(FieldName[mm], "oth_outgo "); mm++;
strcpy(FieldName[mm], "std_res_dth"); mm++;
strcpy(FieldName[mm], "dac_unamort"); mm++;
strcpy(FieldName[mm], "dac_assd"); mm++;
strcpy(FieldName[mm], "adj_math_res"); mm++;
strcpy(FieldName[mm], "prem1yr"); mm++;
strcpy(FieldName[mm], "mat_outgo"); mm++;
strcpy(FieldName[mm], "living_Ben_outgo"); mm++;
strcpy(FieldName[mm], "anuity_outgo"); mm++;
strcpy(FieldName[mm], "surr_outgo"); mm++;
strcpy(FieldName[mm], "TransGAtoSA"); mm++;
strcpy(FieldName[mm], "TransSAtoGA"); mm++;
strcpy(FieldName[mm], "TransSAtoGASurr"); mm++;
strcpy(FieldName[mm], "TransSAtoGALiving"); mm++;
strcpy(FieldName[mm], "TransSAtoGAAnnRes"); mm++;
strcpy(FieldName[mm], "TransSAtoGADthRes"); mm++;
strcpy(FieldName[mm], "SA_Par_Dividends"); mm++;
strcpy(FieldName[mm], "DacAcq_no"); mm++;
strcpy(FieldName[mm], "DacAcq_prem"); mm++;
strcpy(FieldName[mm], "NonDacAcq_no"); mm++;
strcpy(FieldName[mm], "NonDacAcq_prem"); mm++;
strcpy(FieldName[mm], "Maint_no"); mm++;
strcpy(FieldName[mm], "Maint_prem"); mm++;
strcpy(FieldName[mm], "saving_prem_sb_if"); mm++;
strcpy(FieldName[mm], "saving_prem_ga"); mm++;
strcpy(FieldName[mm], "saving_prem_sa"); mm++;
strcpy(FieldName[mm], "rbc_Insurance"); mm++;
strcpy(FieldName[mm], "rbc_Ins_death"); mm++;
strcpy(FieldName[mm], "rbc_Ins_Disbl"); mm++;
strcpy(FieldName[mm], "rbc_Ins_Hosp"); mm++;
strcpy(FieldName[mm], "rbc_Ins_DiagSurg"); mm++;
strcpy(FieldName[mm], "rbc_Ins_Silson"); mm++;
strcpy(FieldName[mm], "rbc_Ins_Oth"); mm++;
strcpy(FieldName[mm], "rbc_riskprem_silson"); mm++;
strcpy(FieldName[mm], "rbc_riskprem_oth"); mm++;
strcpy(FieldName[mm], "rbc_liability"); mm++;
strcpy(FieldName[mm], "rbc_negativemargin"); mm++;
strcpy(FieldName[mm], "rbc_gmab"); mm++;
strcpy(FieldName[mm], "rbc_gmdb_pro"); mm++;
strcpy(FieldName[mm], "rbc_gmdb_ann"); mm++;
strcpy(FieldName[mm], "rbc_gmab_min"); mm++;
strcpy(FieldName[mm], "rbc_gmdb_pro_min"); mm++;
strcpy(FieldName[mm], "rbc_gmdb_ann_min"); mm++;
strcpy(FieldName[mm], "gmdb_pro_res_if"); mm++;
strcpy(FieldName[mm], "gmdb_ann_res_if"); mm++;
return;
}
'Programs' 카테고리의 다른 글
| ModelEV.cpp (2) | 2014.08.14 |
|---|---|
| GrpKeyTable.cpp (0) | 2014.08.14 |
| ResultUnit.cpp (0) | 2014.08.14 |
| Inc.hpp (0) | 2014.08.14 |
| Group.cpp (0) | 2014.08.14 |
