請大家幫忙~資料比對問題? |
答題得分者是:gemi0305
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
請教各位,我下面的程式是要從socket收到資料,會先去比對client[20]中,有無相同ID,有的話則取代,無則加入;然後在將client[20]的資料反應到tstringgrid中,但我卻無法存到client[20]中~ 請各位幫忙~謝謝各位 typedef struct{
char ID[10];
char Description[80];
char Status;
}client_Type; client_Type client[20]; void __fastcall TfrmAdmin::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
//the function process data write to buffer by socket int len,i;
char buffer[200]={0},ID[10]; len = Socket->ReceiveLength();
Socket->ReceiveBuf(buffer,len);
memmove((char *)&ID,(char *)&buffer,sizeof(ID));
for(i=0;i<20;i )
{
if(ID == client[i].ID)
{
memmove((char *)&client[i],(char *)&buffer,sizeof(client[i]));
}
for(i=0;i<20;i )
{
if(client[1].ID=="")
memmove((char *)&client[i],(char *)&buffer,sizeof(client[i]));
}
sgrdPMap->OnDrawCell;
} void __fastcall TfrmAdmin::sgrdPMapDrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
switch(Pclient[ACol*sgrdPMap->ColCount ARow].Status)
{
case '1':
sgrdPMap->Canvas->Brush->Color = clGreen;
sgrdPMap->Canvas->FillRect(Rect);
break;
case '0':
sgrdPMap->Canvas->Brush->Color = clRed;
sgrdPMap->Canvas->FillRect(Rect);
break;
default:
sgrdPMap->Canvas->Brush->Color = clWindow;
sgrdPMap->Canvas->FillRect(Rect);
break;
} UINT format = DT_CENTER | DT_VCENTER;
AnsiString text = sgrdPMap->Cells[ACol][ARow]; DrawText(sgrdPMap->Canvas->Handle,text.c_str(),text.Length(),&Rect,format);
}
|
流
中階會員 發表:36 回覆:142 積分:70 註冊:2003-07-24 發送簡訊給我 |
kenbcb 您好: 關於您所問的是想比對 ID
這部份我是用元件 ListBox 去完成
這會對您的資料比較好處理,也不是拘束為20個ID
若有上限的話,也是可以處理的,有需要再給您code
而 ListBox 在程式執行時可隱藏 假設欲比對的資料變數名稱為 ID for(int i=0 ; i < ListBox1->Items->Count ; i )
{
if(ListBox1->Items->Strings[i] != ID)
ListBox1->Items->Add(ID);
}
上述程式代表 for 迴圈判斷過程中,只要出現有 ListBox 裡沒有的ID
就將 ID 加到您的 ListBox 中 希望這會使您滿意 發表人 - 流 於 2003/08/18 18:22:31
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
只有針對寫入client[i]來改,而TStringGrid因為我不清楚你想怎麼顯示,
所以我就先用一個Memo來暫時作為顯示~ 請注意以下的地方:
void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) { bool ID_Exist = false; //用一個旗標判斷id是否存在 int len,i; char buffer[200]={0},ID[10]; //因為buffer可以直接轉型,所以可以不使用ID[10] len = Socket->ReceiveLength(); Socket->ReceiveBuf(buffer,len); memmove(&ID,&buffer,sizeof(ID)); //使用mem不用加(char*) for(i=0;i<20;i ) if(AnsiString((char*)buffer) == AnsiString((char*)client[i].ID)) //這裡我忘了修改,要轉型才能比較 { memmove(&client[i],&buffer,sizeof(client_Type)); ID_Exist=true; //此id是存在的 } if(!ID_Exist) //如果id不存在,才寫入id for(i=0;i<20;i ) { //要把client[].ID轉成string才能和""比對 if(AnsiString((char*)client[i].ID)=="") { memmove(&client[i],&buffer,sizeof(client_Type)); break; //已找到空的位置寫入之後,就可直接跳出迴圈 } } //用memo把client[20]的內容顯示出來 for(int j =0; j<=20; j ) Memo1->Lines->Add(AnsiString((char*)client[j].ID) AnsiString((char*)client[j].Description) AnsiString((char*)client[j].Status)); }國泰平安 發表人 - Gemi0305 於 2003/08/19 12:47:51 發表人 - Gemi0305 於 2003/08/19 13:25:00 |
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
我剛剛看了一下程式,發現有些小錯誤,
用看的改了一下,可是沒實際去跑...要等下班才比較空,sorry~
我有修改的地方,寫在上篇的程式碼上,用紅色表示~
你只要照包前輩的那個> class="code">
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
bool ID_Exist = false;
int len,i;
char buffer[200]={0}; len = Socket->ReceiveLength();
Socket->ReceiveBuf(buffer,len); for(i=0;i<20;i )
if(AnsiString((char*)buffer) == AnsiString((char*)client[i].ID))
{
memmove(&client[i],&buffer,sizeof(client_Type));
StringGrid1->Repaint();
ID_Exist=true;
} if(!ID_Exist)
for(i=0;i<20;i )
{
if(AnsiString((char*)client[i].ID)=="")
{ memmove(&client[i],&buffer,sizeof(client_Type));
StringGrid1->Repaint();
break;
}
} //---------用memo來秀,如果不需要,可以刪之不用--------
for(int j =0; j<=20; j )
Memo1->Lines->Add(AnsiString((char*)client[j].ID)
AnsiString((char*)client[j].Description)
AnsiString((char*)client[j].Status)); }
國泰平安
|
Schuamcher
一般會員 發表:30 回覆:42 積分:14 註冊:2004-11-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |