?? unit1.cpp
字號:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_OpenFileClick(TObject *Sender)
{
int RFileHandle;
int RFileLength;
int RBytesRead;
char *pszBuffer;
int ii,jj,kk,dd,mm,mm_max=0,LineNum_Max;
char MYMSG[2255],TMSG[255];;
char CH;
double data[400];
int Static[NN_Row];
if (OpenDialog1->Execute())
{
try
{
RFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead);
RFileLength = FileSeek(RFileHandle,0,2);
FileSeek(RFileHandle,0,0);
pszBuffer = new char[RFileLength+1];
RBytesRead = FileRead(RFileHandle, pszBuffer, RFileLength);
FileClose(RFileHandle);
for(ii=0;ii<NN_Row;ii++)
for(jj=0;jj<NN_Column;jj++)
*(Data[ii]+jj)=NO_VALUE;
kk=0;jj=0;
for(ii=0;ii<RBytesRead;ii++)
{
CH=pszBuffer[ii];
switch(CH)
{
case 10: MYMSG[kk]='\0';
kk=0;
dd=CharToDouble(MYMSG,data,400);
for(mm=0;mm<dd&&mm<NN_Column;mm++)
*(Data[jj]+mm)=data[mm];
*(Data_Flag+jj)=mm;
/* sprintf(TMSG,"dd=%d",dd);
strcpy(MYMSG,TMSG);
for(mm=0;mm<dd;mm++)
{
sprintf(TMSG,"jj=%d, dd=%d[%f]",jj,mm,data[mm]);
strcat(MYMSG,TMSG);
}
Application->MessageBox(MYMSG,"Message !",MB_OK); */
if(mm_max<mm)mm_max=mm;
jj++;
break;
default: MYMSG[kk]=CH;
kk++;
break;
}
if(jj>=NN_Row) break;
}
delete [] pszBuffer;
// Application->MessageBox(MYMSG,"Message !",MB_OK); */
sprintf(MYMSG,"There are %d Rows by %d Columns data",jj,mm_max);
Label1->Caption=OpenDialog1->FileName+" has been opened.";
Label2->Caption=MYMSG;
Column=mm_max;
Row=jj;
mm_max=0; LineNum_Max=0;
for(ii=0;ii<NN_Column;ii++)
Static[ii]=0;
for(ii=0;ii<Row;ii++)
{
if(*(Data_Flag+ii)>=NN_Column) *(Data_Flag+ii)=NN_Column-1;
Static[*(Data_Flag+ii)]++;
}
for(ii=0;ii<NN_Column;ii++)
if(Static[ii]>LineNum_Max)
{
mm_max=ii; LineNum_Max=Static[ii];
// sprintf(MYMSG,"ii=%d,Static[ii]=%d",ii,Static[ii]);
// Application->MessageBox(MYMSG,"Message !",MB_OK);
}
Column=mm_max;
MYMSG[0]='\0';
for(mm=0;mm<Column;mm++)
{
sprintf(TMSG,"%g, ",*(Data[Row-1]+mm));
strcat(MYMSG,TMSG);
}
Label_Example->Caption=MYMSG;
ComboBox_Line1->Items->Clear();
ComboBox_Line2->Items->Clear();
TStringList* MyList = new TStringList();
for(jj=0;jj<Column;jj++)
{
sprintf(MYMSG,"%2d",jj);
MyList->Add(MYMSG);
}
ComboBox_Line1->Items->AddStrings(MyList);
ComboBox_Line2->Items->AddStrings(MyList);
}
catch(...)
{
Application->MessageBox("Can't perform one of the following file operations: Open, Seek, Read, Close.", "File Error", IDOK);
}
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
int 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::FormCreate(TObject *Sender)
{
int ii;
char MYMSG[255];
for(ii=0;ii<NN_Row;ii++)
if((Data[ii]=(double *)malloc(NN_Column*sizeof(double) ))==NULL)
{
sprintf(MYMSG,"Cannot allocate for KoData!");
Application->MessageBox(MYMSG,"Cannot allocate!",MB_OK);
}
if((Data_Flag=(int *)malloc(NN_Row*sizeof(int) ))==NULL)
{
sprintf(MYMSG,"Cannot allocate for KoData!");
Application->MessageBox(MYMSG,"Cannot allocate!",MB_OK);
}
Row=0;Column=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_SaveResultsClick(TObject *Sender)
{
char szFileName[MAXFILE+4];
int WFileHandle;
int WLength;
char MYMSG[1500],tempMSG[40];
double *dataA,*dataB;
double avgA,mulA,avgB,mulB,mulAB,mul;
int Column_ReadA,Column_ReadB;
int row;
Column_ReadA=ComboBox_Line1->Text.ToInt();
Column_ReadB=ComboBox_Line2->Text.ToInt();
// char
char CH1=13,CH2=10;
int ii,jj,kk;
if(Column<=0||Row<=0) return;
if((dataA=(double *)malloc(Row*sizeof(double) ))==NULL)
{
sprintf(MYMSG,"Cannot allocate for KoData!");
Application->MessageBox(MYMSG,"Cannot allocate!",MB_OK);
}
if((dataB=(double *)malloc(Row*sizeof(double) ))==NULL)
{
sprintf(MYMSG,"Cannot allocate for KoData!");
Application->MessageBox(MYMSG,"Cannot allocate!",MB_OK);
}
row=0;
for(ii=0;ii<Row;ii++)
{
if(*(Data_Flag+ii)!=Column)
continue;
*(dataA+row)=*(Data[ii]+Column_ReadA);
*(dataB+row)=*(Data[ii]+Column_ReadB);
row++;
}
if (SaveDialog1->Execute())
{
if (FileExists(SaveDialog1->FileName))
{
fnsplit(SaveDialog1->FileName.c_str(), 0, 0, szFileName, 0);
strcat(szFileName, ".BAK");
RenameFile(SaveDialog1->FileName, szFileName);
}
WFileHandle = FileCreate(SaveDialog1->FileName);
if(RadioButton_Corr->Checked==true) //Calculate Cross corelation
for(ii=-row+1;ii<row;ii++)
{
avgA=0;mulA=0;avgB=0;mulB=0;mulAB=0; jj=0;mul=0;
for(kk=0;ii+kk<row&&kk<row;kk++) //keep dataA quiet, move dataB{-row,+row}
{
if(ii+kk>=0)
{
if(*(dataA+ii+kk)<-9998||*(dataB+kk)<-9998) continue;
avgA=avgA*jj/(jj+1.0)+*(dataA+ii+kk)/(jj+1.0);
mulA=mulA*jj/(jj+1.0)+*(dataA+ii+kk)* *(dataA+ii+kk)/(jj+1.0);
avgB=avgB*jj/(jj+1.0)+*(dataB+kk)/(jj+1.0);
mulB=mulB*jj/(jj+1.0)+*(dataB+kk)* *(dataB+kk)/(jj+1.0);
mulAB=mulAB*jj/(jj+1.0)+*(dataA+ii+kk)* *(dataB+kk)/(jj+1.0);
mul+=*(dataA+ii+kk)* *(dataB+kk);
jj++;
}
}
if(!(avgA==0||mulA==0||avgB==0||mulB==0||mulAB==0||jj==0||mul==0))
{
sprintf(MYMSG,"%d %g %d%c%c", ii,mul,kk,CH1,CH2);
// sprintf(MYMSG,"%d %g%c%c", ii,(mulAB-avgA*avgB)/sqrt(mulA-avgA*avgA)/sqrt(mulB-avgB*avgB),CH1,CH2);
FileWrite(WFileHandle, MYMSG, strlen(MYMSG));
}
}
else
for(ii=-row/2;ii<=row/2;ii++) //Calculate Cross corelation coefficient
{
avgA=0;mulA=0;avgB=0;mulB=0;mulAB=0; jj=0;mul=0;
for(kk=0;ii+kk<row&&kk<row;kk++) //keep dataA quiet, move dataB{-row/2,+row/2}
{
if(ii+kk>=0)
{
if(*(dataA+ii+kk)<-9998||*(dataB+kk)<-9998) continue;
avgA=avgA*jj/(jj+1.0)+*(dataA+ii+kk)/(jj+1.0);
mulA=mulA*jj/(jj+1.0)+*(dataA+ii+kk)* *(dataA+ii+kk)/(jj+1.0);
avgB=avgB*jj/(jj+1.0)+*(dataB+kk)/(jj+1.0);
mulB=mulB*jj/(jj+1.0)+*(dataB+kk)* *(dataB+kk)/(jj+1.0);
mulAB=mulAB*jj/(jj+1.0)+*(dataA+ii+kk)* *(dataB+kk)/(jj+1.0);
mul+=*(dataA+ii+kk)* *(dataB+kk);
jj++;
}
}
if(avgA!=0&&mulA!=0&&avgB!=0&&mulB!=0&&mulAB!=0&&jj!=0&&mul!=0&&(mulA-avgA*avgA)>0&&(mulB-avgB*avgB)>0)
{
sprintf(MYMSG,"%d %g %d%c%c", ii,(mulAB-avgA*avgB)/sqrt(mulA-avgA*avgA)/sqrt(mulB-avgB*avgB),kk,CH1,CH2);
FileWrite(WFileHandle, MYMSG, strlen(MYMSG));
}
}
/* for(ii=0;ii<row;ii++)
{
sprintf(MYMSG,"%g %g%c%c", *(dataA+ii),*(dataB+ii),CH1,CH2);
FileWrite(WFileHandle, MYMSG, strlen(MYMSG));
}
for(ii=0;ii<row;ii++)
{
MYMSG[0]='\0';
for(jj=0;jj<Column;jj++)
{
sprintf(tempMSG,"%g, ",*(Data[ii]+jj));
strcat(MYMSG,tempMSG);
}
sprintf(tempMSG,"%c%c",CH1,CH2);
strcat(MYMSG,tempMSG);
FileWrite(WFileHandle, MYMSG, strlen(MYMSG));
}
*/
if(RadioButton_Corr->Checked==true)
Label5->Caption="Saved into file: "+SaveDialog1->FileName;
else
Label5->Caption="Saved into file: "+SaveDialog1->FileName;
FileClose(WFileHandle);
}
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -