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

如何抓取文字檔內的字串

尚未結案
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-28 11:31:49 IP:218.162.xxx.xxx 未訂閱
現在我需要從一個文字檔內將一個字串抓出來,然後將內容給某一個元件    我在每一個元件內都設有他的判斷字元    EX:34---->%是對應給MaskEdit    #ABCD---->#是對應給CheckBox (抓到#ABCD,CheckBox就打勾)    我想我可以利用"搜尋"的方式來做我要的功能    下面是搜尋的程式碼,我想問的是哪一個是代表使用者"輸入"要尋找的字串    
int FoundAt, StartPos, ToEnd;
  if (PageControl1->ActivePage==TabSheet1)
  {
  if (RichEdit1->SelLength)
    StartPos = RichEdit1->SelStart   RichEdit1->SelLength;
  else
    StartPos = 0;      ToEnd = RichEdit1->Text.Length() - StartPos;
  FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase);      if (FoundAt != -1)
  {
    RichEdit1->SetFocus();
    RichEdit1->SelStart = FoundAt;
    RichEdit1->SelLength = FindDialog1->FindText.Length();
  }
  else
    ShowMessage("搜尋完畢");
    }
 
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-28 13:59:48 IP:61.66.xxx.xxx 未訂閱
我想你這段Code應該是寫在FindDialog1的OnFind事件裡面吧.. 當使用者按 找下一個 就會觸發這個事件..    至於你要把FindDialog1叫出來讓人輸入
 
FindDialog1->Execute();
而FindDialog1->FindText 就是搜尋框裡的文字..
發表人 - bass15 於 2005/07/28 14:11:31
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-28 14:11:02 IP:218.162.xxx.xxx 未訂閱
不是啦,是我沒說清楚嗎?^^ 我是說利用"搜尋的程式碼"來找出那一個字串, 找到我就可以把它的值給我想要的元件了, 所以不是要叫出對話框,是要改搜尋的程式碼 EX:改好的程式碼寫在按鈕裡,按下去後他就去文章抓34給MaskEdit顯示出來 但是我不知道程式碼裡頭哪一個是"使用者輸入的內容"。 謝謝你的回答^^
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-28 16:46:09 IP:61.66.xxx.xxx 未訂閱
FindDialog1->FindText 就是使用者輸入的文字
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-28 21:40:44 IP:218.162.xxx.xxx 未訂閱
謝謝我已經弄好了 不過我只寫出找固定識別字 EX:CheckBox裡頭就只有"刪除"、"取代"、"前後插入"4個識別字 這4個都是固定會出現在檔案內的,所以要找出來沒問題 像是MaskEdit這種使用者輸入的內容不ㄧ定的,我就弄不出來了 MaskEdit元件的內容就是%XXXXX....長度內容不ㄧ定 只能知道%後面就是他的內容,接下來就卡住了><
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-28 22:48:51 IP:59.104.xxx.xxx 未訂閱
引言: 謝謝我已經弄好了 不過我只寫出找固定識別字 EX:CheckBox裡頭就只有"刪除"、"取代"、"前後插入"4個識別字 這4個都是固定會出現在檔案內的,所以要找出來沒問題 像是MaskEdit這種使用者輸入的內容不ㄧ定的,我就弄不出來了 MaskEdit元件的內容就是%XXXXX....長度內容不ㄧ定 只能知道%後面就是他的內容,接下來就卡住了><
您好! 您既然知道的內容,那就可以用MaskEdit->Text.Length();看MaskEdit的長度來取得MaskEdit的內容了! 做法如:MaskEdit->Text.SubString(0,MaskEdit->Text.Length()); 不知是不是您要的!
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-28 23:10:26 IP:218.162.xxx.xxx 未訂閱
以下是我自己參考BCb程式碼所寫的格式範例(擷取) 
void__Netcall Path::(TComponent* Owner);//路徑
{
 Opposite:[34]; //--->這給Maskedit用
 Absolute:[#ABCD];         //--->這給CheckBox用
}
//---------------------------------------------------------------------------                                
1.如果使用者在CheckBox打勾就會在那地方寫上#ABCD(固定寫#ABCD) 2.輸入在MaskEdit的內容就會變成寫在34(輸入什麼就寫什麼進來) 這是原本我做好的功能,現在反過來,讀這個文字檔,要把 這2個元件內容寫回去 CheckBox因為固定出現#ABCD很好判斷 但是MaskEdit的內容、長度都不ㄧ定 只知道他會出現在哪一型哪一列,前面有識別字元"%" 並且至少有2到3個的MaskEdit內容連在一起 EX:Opposite:[34V7890];
RedSnow
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-28 23:51:26 IP:61.230.xxx.xxx 未訂閱
Miki-lion 妳好:    妳可以使用字串找尋的方式,先找到關鍵字 Opposite:[ 字樣,然後記錄下該位置 (pos1),再由那個位置之後繼續去找 ] 符號 (pos2),這樣子妳就可以擷取到 [] 之間的字串 (str),然後再以 % 符號為找尋對象,就可以將 str 拆解成數個子字串了,拆解的方式很多種,可以用 AnsiString 的 Pos() 函式找到下一個 % 符號處,然後以 SubString() 函式拆解出來,也可以用 StringReplace() 函式將 % 符號代換成換行符號,然後拆解給 TStringList 亦可,試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-07-29 00:04:16 IP:218.162.xxx.xxx 未訂閱
嗯嗯~~我是真的沒想到有這招~我馬上去試~謝謝 可是因為這幾個元件一起使用後,就會把後面的];刪掉 這問題我還在頭痛呢><
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-07-29 15:53:53 IP:218.162.xxx.xxx 未訂閱
我想請問一下    我現在已經可以將我想要的這3個元件內容,寫到我想要的位置了    我有加一個清除鈕,同時清除掉元件內容,可是在RichEdit上的內容還是不變    而且在RadioButton元件裡頭,選擇其中一個後再選第二個,不是選項會跳過去第二個嗎?    可是他在RichEdit內的第一個選項還是會留著,就變成我寫入了兩個選項    1.要如何在這4個RadioButton裡頭切換也可以將寫入的內容做切換?    2.清除元件內容也一併清除RichEdit內的值?       
    int col = 36;  // 要處理的欄位數 (Column)
    int row = 47;  // 要處理的行數 (Row)
    AnsiString t1 ;        if (RichEdit2->Lines->Count < row+1) { // 如果 RichEdit 行數不足 10 行
        for (int i=RichEdit2->Lines->Count; i<10; i++) {
            RichEdit2->Lines->Add("");  // 產生足夠的空行
        }
    }        AnsiString temp = RichEdit2->Lines->Strings[row];  // 設 temp 為 RichEdit2第 row 行的內容
    if(RadioButton3->Checked)
    {
    t1 = "true";
    }        int len1 = t1.Length();  // 設 len1 為字數        if (len1 > 0 ) {
        int len = temp.Length();  // 設 len 為 RichEdit1 第 row 行內容的字數
        if(len < col){  // 如果資料行字元數少於 col 值,則以空白字元補足它
            RichEdit2->Lines->Strings[row] = temp + AnsiString::StringOfChar(' ', col - len);
            temp = RichEdit2->Lines->Strings[row];
        }            if(len1 > 0){
            t1 = "&"+t1;  // 在 t1 前加上 % 符號
        }            temp = temp.SubString(1, col-1) + t1 +temp.SubString(col+oldlen, temp.Length()-((col+oldlen)-1));
        oldlen = t1.Length();   // 設定 oldlen 為兩個 MaskEdit 內容的長度 (包含 % 符號在內)
    } else {
        temp = temp.SubString(1, col-1) + temp.SubString(col+oldlen, temp.Length()-((col+oldlen)-1));
        oldlen = 0;
    }
    我有想過在這裡加語法,判斷清除紐被按下的話,temp="";
    RichEdit2->Lines->Strings[row] = temp; // 將重新組合過的字串設回給 RichEdit 第 row 行
 
RedSnow
版主


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-08-02 01:32:57 IP:61.230.xxx.xxx 未訂閱
Miki-lion 妳好:
引言:1.要如何在這4個RadioButton裡頭切換也可以將寫入的內容做切換? 2.清除元件內容也一併清除RichEdit內的值?
請再進一步解釋一下那四個 RadioButton 切換後,寫入的內容所相對的切換是怎麼個切換法?清除元件內容指的是那個元件的內容? 7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-08-02 01:44:11 IP:218.162.xxx.xxx 未訂閱
1. 假設有RadioButton1和2, 按下RadioButton1後,再按RadioButton2不是會被切換過去嗎? 一次只會有一個RadioButton被按下。 所以在按下時RadioButton1它的資料已經寫在RichEdit了,如果切換到RadioButton2, 這個RadioButton2所寫入的內容又加了進去,但是上一個RadioButton1的內容 並不會隨著它的切換一起將剛剛寫入的東西清掉, 2. 另一個問題是我寫了ㄧ個可以同時清除4個RadioButton選取狀態的按鈕, 按下後4個RadioButton就回到未選取的狀態,但是之前寫入到RichEdit的內容不會一起被清掉(就跟第一個問題一樣) 謝謝前輩們抽空看我的問題!!
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-08-02 23:33:44 IP:61.59.xxx.xxx 未訂閱
1. 你就在要切換之前把RichEdit->Text記下來... 如果切換到另一個就先把RichEdit->Text恢復...再做所要的動作阿...(不過你都要回復那你什麼時候會真正修改呢??) 2. 同上.. 你先想好流程吧.. 建議加個 確定按鈕..按下去是真正修改...
系統時間:2024-05-10 2:04:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!