⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 Spikes can be taken as absolute quantities of measuring values which are large than approximately fo
💻 CPP
📖 第 1 页 / 共 2 页
字号:
 for(jj=48;jj<=49;jj++)
  {
   Identify_ID_B(jj);
  }
 for(jj=64;jj<=69;jj++)
  {
   Identify_ID_B(jj);
  }
 */
  /*   
 for(jj=7;jj<42;jj++)                   //小于12和大于43的量不需要鉴别  for GN forest      小于6大于70的不需要鉴别for HNM
  {
   if(jj==38||jj==39||jj==42||jj==43||(jj<=63&&jj>=52)) continue;      //wind direction need not
   Identify_ID_B(jj);                       //Bad
  }
*/
                Btn_Perform->Enabled=false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
 int  __fastcall TForm1::CharToDouble (char string[],double data[],unsigned int nn)
 {
  unsigned int ii,jj,dd,mm;                 //ii for index of character which can be transfered by AnsiString.ToDouble(),dd for index of data array
  char MYMSG[255],TMSG[200];                 //TMSG is the character hich can be transfered by AnsiString.ToDouble()
  unsigned  int EndRD;                       //when EndRD=1, the current datum has been read over because meeting undatum character.
  int FlagE,FlagD;  //for e(or E) and Dot respectively
  dd=0;
  FlagE=0;  FlagD=0; EndRD=0;ii=0;      //
  ii=0;TMSG[0]='0';
 for(jj=0;jj<strlen(string);jj++)
 {
   if(string[jj]=='-'||string[jj]=='+'||string[jj]=='.'||string[jj]=='e'||string[jj]=='E'||(string[jj]<=57&&string[jj]>=48))
     {
	     switch(string[jj])
                {
		   case  '+':
		   case  '-':
                             if(ii==0) {TMSG[ii]=string[jj]; ii++; }        //+- only presents at the first
                             else
                               if(TMSG[ii-1]=='e'||TMSG[ii-1]=='E')               //similar 1e+4
                                      {TMSG[ii]=string[jj]; ii++; }
                               else   EndRD=1;
                             break;
		   case  '.':
                             if(FlagE==1||FlagD==1){EndRD=1;break;  }
                             TMSG[ii]=string[jj];
                             ii++;
                             FlagD=1;
                             break;
		   case  'e':
		   case  'E':
                             if(FlagE==1){EndRD=1;break; }
                             if((TMSG[ii-1]<=57&&TMSG[ii-1]>=48)||TMSG[ii-1]=='.')
                                  {TMSG[ii]=string[jj];ii++; FlagE=1;}
                             else EndRD=1;
                             break;
                   default:

                             TMSG[ii]=string[jj];
                             ii++;
                             break;
                }
     }
   else
     {
       EndRD=1;
       FlagE=0;  FlagD=0;
     }
    if(EndRD==1)
      {
        if(ii>0)
          {
                              TMSG[ii]='\0';
                              if(!(strlen(TMSG)==1&&(TMSG[0]=='+'||TMSG[0]=='-'||TMSG[0]=='.'||TMSG[0]=='e'||TMSG[0]=='E')) )
                                {
                                      data[dd]=AnsiString(TMSG).ToDouble();
                                      dd++;
                                }
       ii=0;
        if(string[jj]=='+'||string[jj]=='-')
          {
           TMSG[0]=string[jj];
           ii++;
          }
        if(string[jj]=='.')
          {
           TMSG[0]=string[jj];
           FlagD=1;
           ii++;
          }
          }
          FlagE=0; FlagD=0; EndRD=0;
      }
 }
                    if(ii>0)
                            {
                              TMSG[ii]='\0';
                              if(!(strlen(TMSG)==1&&(TMSG[0]=='+'||TMSG[0]=='-'||TMSG[0]=='.'||TMSG[0]=='e'||TMSG[0]=='E')) )
                                {
                                      data[dd]=AnsiString(TMSG).ToDouble();
                                      dd++;
                                }
                            }

   return dd;
 }
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

void __fastcall TForm1::CopyDataFromFile()
{
  int ii,jj;
  int day,num,kk;
  char MYMSG[255];
   int MONTH[12]={31,28,31,30,31,30,31,31,30,31,30,31};
   int MONTH1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        //2002-5-18 11:30
        Start_Num=-1;
        kk=0;
         for(ii=0;ii<Row;ii++)
           {
//            if((int)(*(Data[ii]+0)+0.5)!=Year) continue;
//            if(*(Data_Flag+ii)!=Column)              continue;
            if( (int)(*(Data[ii]+0)+0.5)/10!=200)
            {
              sprintf(MYMSG,"ii=%d:%g %g %g %g!",ii,*(Data[ii]+0),*(Data[ii]+1),*(Data[ii]+2),*(Data[ii]+3));
             // Application->MessageBox(MYMSG,"Error!",MB_OK);
              continue;
            }
            if(*(Data[ii]+1)<0)  *(Data[ii]+1)*=-1;
            if(*(Data[ii]+2)<0)  *(Data[ii]+2)*=-1;
              num=0;day=0;
              for(jj=0;jj<(int)(*(Data[ii]+1)+0.5)-1;jj++)
              if((int)(*(Data[ii]+0)+0.5)==2004)
                 day+=MONTH1[jj];
              else
                 day+=MONTH[jj];
              day+=(int)(*(Data[ii]+2)+0.5)-1;
              num=day*48+(int)(*(Data[ii]+3)+0.5)*2;
              if(*(Data[ii]+4)>29.5&&*(Data[ii]+4)<30.5) num+=1;
                /*
              if((int)(*(Data[ii]+0)+0.5)==2003)     //from 2002
                 num+=17520;
              if((int)(*(Data[ii]+0)+0.5)==2004)
                 num+=17520+17520;  */
                
             if((int)(*(Data[ii]+0)+0.5)==2005)      // from 2004
                 num+=17568;
              if((int)(*(Data[ii]+0)+0.5)==2006)
                 num+=17568+17520;
              if((int)(*(Data[ii]+0)+0.5)==2007)
                 num+=17568+17520+17520;

            if(num>=NN_NewData||num<0)
            {
              sprintf(MYMSG,"ii=%d(num=%d):%g %g %g %g!",ii,num,*(Data[ii]+0),*(Data[ii]+1),*(Data[ii]+2),*(Data[ii]+3));
//              Application->MessageBox(MYMSG,"Error!",MB_OK);
              continue;
            }
            if(Start_Num<0) Start_Num=num;
//              sprintf(MYMSG,"Start_Num=%d!",Start_Num);
//              Application->MessageBox(MYMSG,"Start_Num Message!",MB_OK);

            End_Num=num;
            for(jj=0;jj<*(Data_Flag+ii);jj++)
                 *(NewData[num]+jj)=*(Data[ii]+jj);
            *(NewData_Flag+num)=*(Data_Flag+ii);
            kk++;
           }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::Identify_ID_B(int NoColumn)
{
  int ii,jj,num,nn;
  double avg,sd,mul2;
  int   Out_Flag;
  char MYMSG[255];
  int NN_AVG1, NN_AVG2 ,Repeat_Times,Times_SD_B;

  NN_AVG1=Edit_Before->Text.ToInt();
  NN_AVG2=Edit_After->Text.ToInt();
  Repeat_Times= ComboBox_Circle->Text.ToInt();
  Times_SD_B= ComboBox_SD_Times->Text.ToInt();
 if(CheckBoxLongCircle->Checked==true)
 for(nn=0;nn<Repeat_Times;nn++)               //Long circle
  {
    num=0;avg=0;mul2=0;  Out_Flag=0;
     for(ii=0;ii<NN_NewData;ii++)
     {
          if(fabs(*(NewData[ii]+NoColumn))>NO_VALUE1)      continue;
          avg=avg*num/(num+1.0)+*(NewData[ii]+NoColumn)/(num+1.0);
          mul2=mul2*num/(num+1.0)+*(NewData[ii]+NoColumn)* *(NewData[ii]+NoColumn)/(num+1.0);
          num++;
     }
     if(num<=1||mul2-avg*avg<=1e-10) continue;
     sd=sqrt(mul2-avg*avg);
     for(ii=0;ii<NN_NewData;ii++)
     {
          if(fabs(*(NewData[ii]+NoColumn))>NO_VALUE1)     continue;
          if(fabs(*(NewData[ii]+NoColumn)-avg)>Times_SD_B*sd)
           {
               *(NewData[ii]+NoColumn)=NO_VALUE_SPIKE;
               *(SpikeNum+ii)=*(SpikeNum+ii)+1;
               Out_Flag++;
           }
     }
   if(Out_Flag==0&&nn>0) break;
  }
  
 if(CheckBoxShortCircle->Checked==true)
 for(nn=0;nn<Repeat_Times;nn++)        //Short Circle
 {
   Out_Flag=0;
   for(ii=0;ii<NN_NewData;ii++)
     {
        if(fabs(*(NewData[ii]+NoColumn))>NO_VALUE1)        continue;
       num=0;avg=0; mul2=0;
       for(jj=-NN_AVG1;jj<=NN_AVG2;jj++)  // calculate the avg and sd;
         {
           if((jj+ii)<0||(jj+ii)>=NN_NewData) continue;
           if(fabs(*(NewData[ii+jj]+NoColumn))>NO_VALUE1)  continue;
           avg=avg*num/(num+1.0)+*(NewData[jj+ii]+NoColumn)/(num+1.0);
           mul2=mul2*num/(num+1.0)+*(NewData[jj+ii]+NoColumn)* *(NewData[jj+ii]+NoColumn)/(num+1.0);
           num++;
         }
         if(num<=1||mul2-avg*avg<=1e-10) continue;
         if(mul2-avg*avg<0||mul2-avg*avg>1e50)
          {
               sprintf(MYMSG,"Row=%d,Column=%d,num=%d,mul2-avg*avg=%g!",ii,NoColumn,num,mul2-avg*avg);
               Application->MessageBox(MYMSG,"Message!",MB_OK);
          }
         sd=sqrt(mul2-avg*avg);

       if(fabs(*(NewData[ii]+NoColumn)-avg)>Times_SD_B*sd) // remove the data due to large deviation
            {
                *(NewData[ii]+NoColumn)=NO_VALUE_SPIKE;
                *(SpikeNum+ii)=*(SpikeNum+ii)+1;
                Out_Flag+=1;
                if(ii==35)
                {
               sprintf(MYMSG,"*(NewData[%d]+NoColumn)!",ii,*(NewData[ii]+NoColumn));
               Application->MessageBox(MYMSG,"Message!",MB_OK);
                }
            }
   }
   if(Out_Flag==0&&nn>0) break;
 }
}
//-------------------------------------------------------------------------------
void __fastcall TForm1::Range_Check()
{
  int ii,jj;
 char MYMSG[2000],TMSG[1000];
/* double Range_Fc1=-10,Range_Fc2=10;                      // mg/(m^2s)
 double Range_LE1=-600,Range_LE2=600;                    // W/m^2
 double Range_Hs1=-600,Range_Hs2=600;                    // W/m^2
 double Range_Tao1=-10,Range_Tao2=10;                    // kg/(ms^2)
 double Range_Ustar1=0,Range_Ustar2=10;    */              //  m/s
 double Range_U1=-20,Range_U2=20;                        //  m/s
 double Range_V1=-30,Range_V2=20;                        //  m/s
 double Range_W1=-10,Range_W2=10;                        //  m/s
 double Range_CO21=0,Range_CO22=2000;                    // mg/m^3
 double Range_H2O1=0,Range_H2O2=100;                     // g/m^3
 double Range_Ts1=-30,Range_Ts2=70;                      // C
 double Range_Press1=80,Range_Press2=120;                // kPa
 int ZeroNum;
 if(Row<=0) return;
 //--------------------------------for Guangneung data format for MT
/*       */
 for(ii=0;ii<NN_NewData;ii++)
  {
       if(*(NewData[ii]+30)<=Range_U1||*(NewData[ii]+30)>=Range_U2)        *(NewData[ii]+30)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+31)<=Range_V1||*(NewData[ii]+31)>=Range_V2)        *(NewData[ii]+31)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+32)<=Range_W1||*(NewData[ii]+32)>=Range_W2)        *(NewData[ii]+32)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+33)<=Range_CO21||*(NewData[ii]+33)>=Range_CO22)        *(NewData[ii]+33)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+34)<=Range_H2O1||*(NewData[ii]+34)>=Range_H2O2)        *(NewData[ii]+34)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+35)<=Range_Ts1||*(NewData[ii]+35)>=Range_Ts2)           *(NewData[ii]+35)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+36)<=Range_Press1||*(NewData[ii]+36)>=Range_Press2)       *(NewData[ii]+36)=NO_VALUE_SPIKE;
       ZeroNum=0;
       for(jj=0;jj<Column;jj++)
         if( fabs(*(NewData[ii]+jj))<1e-10) ZeroNum++;
       if(ZeroNum>Column-6)
             for(jj=6;jj<Column;jj++)
                   *(NewData[ii]+jj)=*(NewData[ii]+jj)=NO_VALUE_SPIKE;
   }

 //--------------------------------for Guangneung data format for ST
/*   
 for(ii=0;ii<NN_NewData;ii++)
  {
       if(*(NewData[ii]+38)<=Range_U1||*(NewData[ii]+38)>=Range_U2)        *(NewData[ii]+38)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+39)<=Range_V1||*(NewData[ii]+39)>=Range_V2)        *(NewData[ii]+39)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+37)<=Range_W1||*(NewData[ii]+37)>=Range_W2)        *(NewData[ii]+37)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+40)<=Range_CO21||*(NewData[ii]+40)>=Range_CO22)        *(NewData[ii]+40)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+41)<=Range_H2O1||*(NewData[ii]+41)>=Range_H2O2)        *(NewData[ii]+41)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+42)<=Range_Ts1||*(NewData[ii]+42)>=Range_Ts2)           *(NewData[ii]+42)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+44)<=Range_Press1||*(NewData[ii]+44)>=Range_Press2)       *(NewData[ii]+44)=NO_VALUE_SPIKE;
       ZeroNum=0;
       for(jj=0;jj<Column;jj++)
         if( fabs(*(NewData[ii]+jj))<1e-10) ZeroNum++;
       if(ZeroNum>Column-6)
             for(jj=6;jj<Column;jj++)
                   *(NewData[ii]+jj)=*(NewData[ii]+jj)=NO_VALUE_SPIKE;
   }
 */
 //--------------------------------for Hannam data format
  /*
 for(ii=0;ii<NN_NewData;ii++)
  {
       if(*(NewData[ii]+58)<=Range_U1||*(NewData[ii]+58)>=Range_U2)        *(NewData[ii]+58)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+59)<=Range_V1||*(NewData[ii]+59)>=Range_V2)        *(NewData[ii]+59)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+60)<=Range_W1||*(NewData[ii]+60)>=Range_W2)        *(NewData[ii]+60)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+61)<=Range_CO21||*(NewData[ii]+61)>=Range_CO22)        *(NewData[ii]+61)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+62)<=Range_H2O1||*(NewData[ii]+62)>=Range_H2O2)        *(NewData[ii]+62)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+63)<=Range_Ts1||*(NewData[ii]+63)>=Range_Ts2)        *(NewData[ii]+63)=NO_VALUE_SPIKE;
       if(*(NewData[ii]+64)<=Range_Press1||*(NewData[ii]+64)>=Range_Press2)       *(NewData[ii]+64)=NO_VALUE_SPIKE;
       ZeroNum=0;
       for(jj=0;jj<Column;jj++)
         if( fabs(*(NewData[ii]+jj))<1e-10) ZeroNum++;
       if(ZeroNum>Column)
             for(jj=0;jj<Column;jj++)
                   *(NewData[ii]+jj)=*(NewData[ii]+jj)=NO_VALUE_SPIKE;

   }     */   /*
 for(ii=0;ii<NN_NewData;ii++)
  {
     for(jj=7;jj<=14;jj++)
       if(*(NewData[ii]+jj)<=Range_CO21||*(NewData[ii]+jj)>Range_CO22)        *(NewData[ii]+jj)=NO_VALUE_SPIKE;
     for(jj=15;jj<=22;jj++)
       if(*(NewData[ii]+jj)<=Range_H2O1||*(NewData[ii]+jj)>Range_H2O2)        *(NewData[ii]+jj)=NO_VALUE_SPIKE;
  }       */
}
//--------------------------------------------------------------------------------
void __fastcall TForm1::CheckBoxShortCircleClick(TObject *Sender)
{
 if(CheckBoxShortCircle->Checked==true)
   {
     Edit_Before->Enabled=true;
     Edit_After->Enabled=true;
     Label_Before->Enabled=true;
     Label_After->Enabled=true;
   }
 else
   {
     Edit_Before->Enabled=false;
     Edit_After->Enabled=false;
     Label_Before->Enabled=false;
     Label_After->Enabled=false;
   }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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