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

Memo 的搜尋效能

答題得分者是:Justmade
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-03 23:25:04 IP:61.59.xxx.xxx 未訂閱
各位前輩好 小弟想在memo元件中,搜尋特定字串 目前使用迴圈的方式一行一行讀 並用 pos()<> 0 得知是否有該字串 但是用這種方式的搜尋效能似乎不太好 想請教各位前輩,是否有什麼函數可以直接搜尋memo中的字串呢? 請大家幫忙,謝謝!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-03 23:35:36 IP:218.16.xxx.xxx 未訂閱
Pos(Memo.Text) > 0 可以一次過看有沒有該字串
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-03 23:40:24 IP:61.59.xxx.xxx 未訂閱
那再請教一下大大 以此種方式可以得知該字串出現過幾次 並且是否可以知道出現在那一行(LINE) 謝謝!
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-04 00:05:11 IP:61.59.xxx.xxx 未訂閱
謝謝您,經由您剛剛的提示,我已經想到更好的解決方法 同樣的東西,原先要搜尋7秒,現只要2秒即可完成~ 不過我想了一下,用那個方法大概無法知道出現在第幾行吧 ANYWAY,還是很感激您^^
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-04 01:44:14 IP:211.74.xxx.xxx 未訂閱
這一段,是我某程式碼裡的片段 也是搜尋,但是是利用RichEdit 的搜尋功能,你不妨參考    
function GetWordCode(aWord:string;iType:CodeType ):string;
var
    ipos: integer; //selStart 位置
    col: integer;  //取得文字所在行數
    row: integer;  //取得文字所在列數
    itmp:integer;  //記錄是否已搜尋完畢
begin        //初始化
    ipos:=-1;
    itmp:=0;
    RichEdit1[iType].SelStart :=0;        while ipos <> itmp do //若二值不相等,則代表尚未搜尋完畢
    begin
        itmp:=ipos;
        //開始搜尋
        ipos := RichEdit1[iType].FindText(aWord, RichEdit1[iType].SelStart +
            RichEdit1[iType].SelLength, length(RichEdit1[iType].Text), [stMatchCase]);            if ipos <> -1 then //若已搜尋到,則ipos <> -1
        begin
            RichEdit1[iType].SelStart := ipos;
            RichEdit1[iType].SelLength := length(aWord);
            //取得搜尋到的文字所在行數
            col := RichEdit1[iType].SelStart - RichEdit1[iType].Perform(EM_LINEINDEX, -1, 0) + 1;
            //取得搜尋到的文字所在列數
            row := RichEdit1[iType].Perform(EM_LINEFROMCHAR, -1, 0) + 1;              //  ListBox1.Items.Add('第 ' +inttostr(row) + ' 列 : 第 ' + inttostr(col) +
          //      ' 行,注音為: ' +RichEdit1.Lines.Names[row - 1]);
            result:=result + RichEdit1[iType].Lines.Names[row - 1] + chr(13);
        end;
    end;
end;
系統時間:2024-05-14 3:14:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!