달력

122025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

FieldInfoSet.cpp

Programs 2014. 8. 14. 20:16

#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
Posted by Analytical Warrior
|