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

如何完成快速替換字串?

答題得分者是:timhuang
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-29 20:01:05 IP:218.163.xxx.xxx 未訂閱
如何完成快速替換字串?    
 
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
 For i:=0 to Memo1.Lines.Count-1 do
   if (Memo1.Lines[i]<>'') then
     Memo1.Lines[i]:=  Memo1.Lines[i] 'rem'; //在已存在的內容最後面加入rem字串
end;
替換每篇文章行數:3000行...每行加入rem字串 有何種方式比較快? 網海無涯,學無止境! 發表人 - qoo1234 於 2004/02/29 20:02:06
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-29 23:18:01 IP:61.62.xxx.xxx 未訂閱
Hi, 弟覺得使用 TMemo 會相當地慢, 可以考慮改用 TStringList 來進行看看, 效能應該會差很多, 先用 TStringList 加好後, 再傳回 TMemo 即可. 如:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    str: TStringList;
begin
 str := TStringList.Create;
 str.Text:=Memo1.Lines.Text; // 由 memo 取出給 TStringList
 
 For i:=0 to str.Count-1 do
   if (str[i]<>'') then
     str[i]:=  str[i]+'rem'; //在已存在的內容最後面加入rem字串     Memo1.Lines.Text := str.Text; // 再傳回 memo
 str.Free;
end;    
有效能上的問題應該是在 TMemo 上面. TStringList 應該會快上許多..
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-01 00:52:55 IP:218.163.xxx.xxx 未訂閱
謝謝 timhuang 五星上將 受惠良多~ < src="http://delphi.ktop.com.tw/download/upload\33223_qoo.gif">網海無涯,學無止境!
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-12 00:31:28 IP:202.104.xxx.xxx 未訂閱
一句搞定,不用迴圈~速度不賴 memo1.Lines.Text:=stringreplace(memo1.Lines.Text,#13#10,'rem' #13#10,[rfReplaceAll]);
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-12 09:04:22 IP:218.163.xxx.xxx 未訂閱
謝謝 japhenchen 大大 指教~所提供的方法也不錯用,有夠厲害! < src="http://delphi.ktop.com.tw/download/upload\33223_qoo.gif">網海無涯,學無止境!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-12 09:36:20 IP:203.95.xxx.xxx 未訂閱
引言: 一句搞定,不用迴圈~速度不賴 memo1.Lines.Text:=stringreplace(memo1.Lines.Text,#13#10,'rem' #13#10,[rfReplaceAll]);
Hi, japhenchen兄, 這個方法是語法精簡沒錯, 但是速度差異甚大, 之前弟就做過測試, 所以才會建議 qoo1234 兄的做法, 並將資料改用 TStringList 來操作. 以 3000 行來看, 使用 TStringList 的方式大約是 0.06~0.07 秒. 使用 StringReplace 的方式大約為 2.03~2.2 秒. 在弟的 p4 1.6g 的機器上測試的結果. 若是資料量增多, 差異更劇, (9000行時, 前者速度約為 0.18秒, 但用後者的速度會更慢, 約 21~22秒), 還請測試看看. 當然, 就資料量小的時候應該是沒有太大的差異, 端看 qoo1234 兄的用途囉. 根本的原因應在於 StringReplace 是一直在比較字串再重覆加字串的行為, 所以對於這種固定換行取代的方式效能自然大打折扣囉. 弟在此僅對這兩種方法做過簡單的測試並說明, 沒有其他的意思. 還請 japhenchen 兄海涵!
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-12 13:28:15 IP:211.96.xxx.xxx 未訂閱
別介意我會怎麼說囉,只是單純站在一個討論的點上來說這事,當然,方法有好有壞,簡單的方法就會有一些缺點出現,像我提的方法就欠缺考慮到一些狀況的發生,如果空白行不用加REM的話,那我的方法可就不管用了。 謝謝各位前輩的指教,小弟還真的有很多要再多學的~~~汗顏中
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-12 14:53:12 IP:218.163.xxx.xxx 未訂閱
好的方法不嫌多,謝謝兩位大大指教~ < src="http://delphi.ktop.com.tw/download/upload\33223_qoo.gif">網海無涯,學無止境!
系統時間:2024-05-09 1:01:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!