線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1753
推到 Plurk!
推到 Facebook!

請問2個文件檔的比對程式(我有附程式)

尚未結案
tfbg
一般會員


發表:3
回覆:6
積分:1
註冊:2005-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-16 14:13:50 IP:210.66.xxx.xxx 未訂閱
請問:我想把2個(或以上)文字檔裡的資料做比較,若1文字檔有跟stop文字檔相同的資料,則印在Edit1 我寫的程式在下面,但它是又錯的...我找不出哪錯 是getc只能用在int嗎?? 知道的人能幫我解答嗎?謝謝 FILE *fp,*fp2; String sw,sw2; char word[50]; do { fp=fopen("1\\1.txt","r"); //開1文字檔 fscanf(fp,"%s",word); sw=LowerCase(word); sw=sw.Trim(); fp2=fopen("1\\stop.txt","r"); //開stop文字檔 sw2=getc(fp2); }while(!feof(fp2)); Edit1->Text=sw;,,,
powmien
初階會員


發表:27
回覆:80
積分:41
註冊:2004-10-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-16 15:43:20 IP:60.248.xxx.xxx 未訂閱
首先,有開檔就要有關檔,看您貼上來的code.. 並沒關檔。 再來您將 fopen 放在loop 裡面重覆開檔,用法也不太正確。 天下英雄出我輩,一入江湖歲月催; 皇圖霸業談笑中,不勝人生一場醉。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-16 16:37:57 IP:210.68.xxx.xxx 未訂閱
tfbg您好:    PO程式碼的方式與版規說明請參考下面連結,煩請修改謝謝您的配合 >
tfbg
一般會員


發表:3
回覆:6
積分:1
註冊:2005-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-16 23:41:09 IP:60.248.xxx.xxx 未訂閱
感謝你的指點 我還是個程式嫩手 讓你浪費時間看這po文 我會在修改一下重po...
tfbg
一般會員


發表:3
回覆:6
積分:1
註冊:2005-11-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-17 01:01:18 IP:60.248.xxx.xxx 未訂閱
我已修改一些 可以跑 但並非是我要的答案 它直接顯示最後一個資料 我想呈現(sw=sw2)在2個文字檔所有資料 請知道的人能幫幫我 謝謝!! fp=fopen("1\\1.txt","r"); //開檔 fp2=fopen("1\\stop.txt","r"); while(!feof(fp2)){ fscanf(fp,"%s",word); //讀取fp的資料 sw=LowerCase(word); sw=sw.Trim(); e=sw.Length(); //將符號去除 s=sw.SubString(e,e); if(s=="." || s=="?" || s=="!") sw=sw.SubString(0,e-1); sw2=getc(fp2); if(sw==sw2) //若1檔和stop檔所擷取的資料相同則跳出 break; } fclose(fp); //關檔 fclose(fp2); Edit1->Text=sw;
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-17 09:17:14 IP:210.68.xxx.xxx 未訂閱
您好: 再次提醒您    PO程式碼的方式與版規說明請參考下面連結,煩請修改謝謝您的配合 >
tfbg
一般會員


發表:3
回覆:6
積分:1
註冊:2005-11-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-18 01:17:54 IP:210.66.xxx.xxx 未訂閱
對不起 之前看不清楚 只看了一下po文的規矩 漏了程式碼的po法
 
fp=fopen("1\\1.txt","r"); //開檔
fp2=fopen("1\\stop.txt","r");
while(!feof(fp2)){
     fscanf(fp,"%s",word); //讀取fp的資料
     sw=LowerCase(word);
     sw=sw.Trim();
     e=sw.Length(); //將符號去除
     s=sw.SubString(e,e);
     if(s=="." || s=="?" || s=="!")
        sw=sw.SubString(0,e-1);
     sw2=getc(fp2); 
     if(sw==sw2) //若1檔和stop檔所擷取的資料相同則跳出
        break;
}
fclose(fp); //關檔
fclose(fp2);
Edit1->Text=sw;
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-19 21:22:55 IP:59.115.xxx.xxx 未訂閱
tfbg 您好:    如果是我來處理這種比對動作的話,我會使用 StringList 來處理,我的寫法如下,您參考一下吧:
TStringList *multiword = new TStringList;
TStringList *keyword = new TStringList;
TStringList *symbol = new TStringList;    symbol->CommaText = "! ? .";  // 欲清除的符號設為 "驚嘆號"、"問號"、"句號"
symbol->Add(",");  // 欲清除的符號多加一個 "逗號"    multiword->LoadFromFile("c:\\words.txt");    // 清除掉 symbol 所設定的符號字元
for (int i=0; iCount; i  ) {
    multiword->Text = StringReplace(multiword->Text, symbol->Strings[i], "", TReplaceFlags()<CommaText = multiword->Text;  // 將讀入的各個字句拆解成字串陣列    keyword->LoadFromFile("c:\\key.txt");    // 將讀入的各個字句拆解成字串陣列 (如果是單一字句,也會將換行符號過濾掉)
keyword->CommaText = keyword->Text;    // 如果 1.txt 檔案內要比對的字句僅有一個,則啟用本段
for (int j=0; jCount; j  ) {
    if (keyword->Strings[0].LowerCase() == multiword->Strings[j].LowerCase()) {
        ShowMessage("found: "   multiword->Strings[j]);
        break;
    }
}
/*
// 如果 1.txt 檔案內要比對的字句不只一個,則啟用本段
for (int i=0; iCount; i  ) {
    for (int j=0; jCount; j  ) {
        if (keyword->Strings[i].LowerCase() == multiword->Strings[j].LowerCase()) {
            ShowMessage("found: " multiword->Strings[j]);
            break;
        }
    }
}
*/    delete multiword;
delete keyword;
delete symbol;
7 天天敲鍵盤 v 時時按滑鼠 8
tfbg
一般會員


發表:3
回覆:6
積分:1
註冊:2005-11-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-11-20 15:54:15 IP:210.66.xxx.xxx 未訂閱
感謝版大的提供 可以了 謝謝
系統時間:2024-05-12 2:47:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!