全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1603
推到 Plurk!
推到 Facebook!

如何資料比對

尚未結案
mirood
一般會員


發表:10
回覆:27
積分:7
註冊:2007-02-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-05 17:56:35 IP:203.160.xxx.xxx 訂閱
小弟利用TStringList讀入檔案, 但是想要比對讀入的檔案是否重複, 總是找不到程式的頭緒? 是否有哪位大大可以給我一些提示,謝謝!!    txt檔案資料如下: pline 91.892792,61.844597 94.216019,56.235802 85.415108,34.988522 c move l 0,0,0 0,0,0.500000 pline 89.454491,77.483078 85.948143,85.948143 64.700867,94.749062 c move l 0,0,0 0,0,0.500000 pline 87.549881,67.453392 92.196342,56.235802 86.310211,42.025440 c move l 0,0,0 0,0,1.000000 pline 94.388985,70.446159 87.376297,87.376297 73.165939,93.262421c move l 0,0,0 0,0,1.000000    //小弟想將move l 0,0,0 0,0,0.500000及move l 0,0,0 0,0,1.000000前一行(pline...c)的資料個別取出。              OpenDialog1->defaultExt = ".txt";   OpenDialog1->Filter = "test (*.txt)|*.txt";   OpenDialog1->Options << ofOverwritePrompt << ofFileMustExist;      if (OpenDialog1->Execute())   {    int i;    char z1;    //int c=0;    //float all;    String a;    float z[10][10];    //char sbuf[8000];    TStringList *Tempfile=new TStringList;    Tempfile->LoadFromFile(OpenDialog1->FileName);    //Tempfile->LoadFromFile("D:\\test.scr");    i=Tempfile->Count;       for(i=0;iCount;i ) { //strcpy(sbuf,Tempfile->Strings[i-1].c_str()); if(i>=1) { a=Tempfile->Strings[i-1]; //之後要使用什麼辦法,有哪位大大可以提示我!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-05 23:55:39 IP:211.22.xxx.xxx 未訂閱
查一下 PosEx, LeftStr, RightStr 等內建 VCL 函數,搞懂函數的用法答案就呼之欲出了,搜尋一下站裏面也有很多這類函數的用法。
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-06 01:41:33 IP:61.64.xxx.xxx 訂閱
你的問題,問了兩個

1.比對


TMemoA.loadfromfile("檔案一");
TMemoB.loadfromfile("檔案二");
可以
TMemoA.Text = TMemoB.Text <-- 只有 Delphi 可以這樣用,C 要乖乖用比較函式
或是用 strcmp 之類的,一下可以比整個檔案

不過這不是唯一方法,只是一個簡單的笨方式

2.找東西,請用「關鍵字」,加上 pos 函數

要取出 pline... 該行,請找出 pline 的位置,做為「頭」,以 move 的位置,做為「尾」
將頭尾複製出來,即可
使用的函數只有兩個 pos() 與 memcpy()
mirood
一般會員


發表:10
回覆:27
積分:7
註冊:2007-02-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-06 17:39:18 IP:203.160.xxx.xxx 訂閱
pline 91.892792,61.844597 94.216019,56.235802 85.415108,34.988522 83.091873,29.379723 c move l  0,0,0 0,0,0.500000 //為一組資料..................................... pline 89.454491,77.483078 85.948143,85.948143 64.700867,94.749062 c move l  0,0,0 0,0,0.500000 //為另一組資料.....................................    因為上面兩組資料有共同的move l  0,0,0 0,0,0.500000,所以我想利用比對的方式,將 pline 91.892792,61.844597 94.216019,56.235802 85.415108,34.988522 83.091873,29.379723 c 存入Memo1中,另一組 pline 89.454491,77.483078 85.948143,85.948143 64.700867,94.749062 c 存入Memo2中,可是我利用strcmp可以比對,但是字串判別不是想看到的結果,程式哪裡有問題呢? 麻煩大大能幫我看看!    void __fastcall TForm1::Button1Click(TObject *Sender) {   OpenDialog1->DefaultExt = ".txt";   OpenDialog1->Filter = "test (*.txt)|*.txt";   OpenDialog1->Options << ofOverwritePrompt << ofFileMustExist;      if (OpenDialog1->Execute())   {    int i,c;    char test1[500],test2[500];    //char sbuf;    TStringList *Tempfile=new TStringList;    Tempfile->LoadFromFile(OpenDialog1->FileName);    i=Tempfile->Count;       for(i=0;iCount-1;i ) { if(iCount-2) { strcpy(test1,Tempfile->Strings[i 1].c_str()); } if(iCount-4) { strcpy(test2,Tempfile->Strings[i 3].c_str()); } int ptr; ptr = strcmp(test1,test2); if (ptr == 0) { if(i<=Tempfile->Count-1) { a=Tempfile->Strings[i]; Memo1->Lines->Add(a); } } } } }
mirood
一般會員


發表:10
回覆:27
積分:7
註冊:2007-02-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-06 19:42:19 IP:203.160.xxx.xxx 訂閱
發現可以區分出來~ 但是只能找前兩筆資料~ 是不是搜尋還不夠完整~ TXT資料如下~ pline 91.892792,61.844597 94.216019,56.235802 85.415108,34.988522 83.091873,29.379723 61.844597,20.578812 c move l  0,0,0 0,0,0.500000 pline 89.454491,77.483078 85.948143,85.948143 64.700867,94.749062 56.235802,98.255409 c move l  0,0,0 0,0,0.500000 pline 87.549881,67.453392 92.196342,56.235802 86.310211,42.025440 81.663750,30.807846 67.453392,24.921724 56.235802,20.275259 c move l  0,0,0 0,0,1.000000 pline 94.388985,70.446159 87.376297,87.376297 73.165939,93.262421 56.235802,100.275108 42.025440,94.388985 25.095303,87.376297 c move l  0,0,0 0,0,1.000000 pline 83.206963,73.062195 90.176659,56.235802 87.205322,49.062363 80.235626,32.235970 c move l  0,0,0 0,0,1.500000 pline 99.323479,63.409237 88.804443,88.804443 81.631004,91.775780 56.235802,102.294815 c move l  0,0,0 0,0,1.500000 pline 78.864052,78.670990 88.156982,56.235802 88.100433,56.099285 78.807503,33.664093 c move l  0,0,0 0,0,2.000000 pline 104.257973,56.372318 90.232590,90.232590 90.096077,90.289139 c move l  0,0,0 0,0,2.000000    <textarea class="cpp" rows="10" cols="60" name="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { OpenDialog1->DefaultExt = ".txt"; OpenDialog1->Filter = "test (*.txt)|*.txt"; OpenDialog1->Options << ofOverwritePrompt << ofFileMustExist; if (OpenDialog1->Execute()) { int i,c; char test1[500],test2[500],test3[500]; String a,b; //char sbuf; TStringList *Tempfile=new TStringList; Tempfile->LoadFromFile(OpenDialog1->FileName); i=Tempfile->Count; for(i=0;iCount;i ) { //strcpy(test1,Tempfile->Strings[i-2].c_str()); if(i>=1) { if(iCount-2) { strcpy(test1,Tempfile->Strings[i 1].c_str()); } if(iCount-4) { strcpy(test2,Tempfile->Strings[i 3].c_str()); } int ptr; ptr = strcmp(test1,test2); if (ptr == 0) { if(i<=Tempfile->Count-1) { a=Tempfile->Strings[i-4]; Memo1->Lines->Add(a); b=Tempfile->Strings[i-2]; Memo2->Lines->Add(b); } } } } } } </textarea>
系統時間:2024-05-09 11:53:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!