如何完成快速替換字串? |
答題得分者是:timhuang
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
如何完成快速替換字串?
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 發送簡訊給我 |
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 發送簡訊給我 |
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
引言: 一句搞定,不用迴圈~速度不賴 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 發送簡訊給我 |
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |