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

如何改善執行的速度?

 
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-13 17:25:49 IP:210.201.xxx.xxx 未訂閱
我有一個.csv檔(約1.73M 大小),當我用Excel開啟後,去置換當中的某些字元 時,其處理速度相當快。但是若將其副檔名改成.txt的文字檔同樣利用當中的置換功能時其速度慢得誇張,所以自個兒寫個小程式來代替時發現速度一樣慢,我利用ReplaceDialog的OnReplace事件,程式如下: with TReplaceDialog(Sender) do begin SelPos := Pos(FindText, dtMemo.Lines.Text); FindText := '"'; ReplaceText := ''; while SelPos > 0 do begin SelPos := Pos(FindText, dtMemo.Lines.Text); dtMemo.SelStart := SelPos - 1; dtMemo.SelLength := Length(Findtext); { Replace selected text with ReplaceText } dtMemo.SelText := ReplaceText; end; 不知有無它法可讓其速度如Excel一樣快? 謝謝。
------
我也在努力學習中,若有錯謬請見諒。
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-07-13 21:22:48 IP:192.168.xxx.xxx 未訂閱
引言: 我有一個.csv檔(約1.73M 大小),當我用Excel開啟後,去置換當中的某些字元 時,其處理速度相當快。但是若將其副檔名改成.txt的文字檔同樣利用當中的置換功能時其速度慢得誇張,所以自個兒寫個小程式來代替時發現速度一樣慢,我利用ReplaceDialog的OnReplace事件,程式如下: with TReplaceDialog(Sender) do begin SelPos := Pos(FindText, dtMemo.Lines.Text); FindText := '"'; ReplaceText := ''; while SelPos > 0 do begin SelPos := Pos(FindText, dtMemo.Lines.Text); dtMemo.SelStart := SelPos - 1; dtMemo.SelLength := Length(Findtext); { Replace selected text with ReplaceText } dtMemo.SelText := ReplaceText; end; 不知有無它法可讓其速度如Excel一樣快? 謝謝。
用這個試試看 type TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-07-13 22:32:46 IP:210.201.xxx.xxx 未訂閱
這個方法我也試過了,速度上只稍快了一點點,還是不行。
------
我也在努力學習中,若有錯謬請見諒。
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-07-14 08:23:31 IP:192.168.xxx.xxx 未訂閱
引言: 這個方法我也試過了,速度上只稍快了一點點,還是不行。
記得,在資料結構演算法中,有一個Search的方法,您有試過嗎? (大學中學過,但書已不見了) 它會判斷您輸入的字串長度與重複性,來決定下一個要找的位置, 不必每次都是一個一個重複地找! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-07-16 10:51:02 IP:192.72.xxx.xxx 未訂閱
引言: 這個方法我也試過了,速度上只稍快了一點點,還是不行。
你慢的地方應該是在 load data to buffer. 應該改用別種方式將資料讀進 memory, 再置換. 因為我認為 ReplaceStr() Boland 應該以將其最佳化. 除非你用組合語言改寫, 不然再怎麼寫也快不到那兒去. 我自己用 memo 讀入資料, 再用 replaceStr, 兩行就搞定. 不過檔案 size 只有約 1000 bytes 左右, 速度很快. 對了, 我是用 AnsiReplaceStr 而非 ReplaceStr.(以避免中文問題, 你若處理純英文資料, 那就沒差了) 發表人 - 鈴鐺 於 2002/07/16 10:53:44
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-16 12:29:19 IP:163.15.xxx.xxx 未訂閱
能Post一段程式讓我測試用嗎,謝謝。
------
我也在努力學習中,若有錯謬請見諒。
Edward
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-07-16 19:56:47 IP:202.39.xxx.xxx 未訂閱
引言: 我有一個.csv檔(約1.73M 大小),當我用Excel開啟後,去置換當中的某些字元 時,其處理速度相當快。但是若將其副檔名改成.txt的文字檔同樣利用當中的置換功能時其速度慢得誇張,所以自個兒寫個小程式來代替時發現速度一樣慢,我利用ReplaceDialog的OnReplace事件,程式如下: with TReplaceDialog(Sender) do begin SelPos := Pos(FindText, dtMemo.Lines.Text); FindText := '"'; ReplaceText := ''; while SelPos > 0 do begin SelPos := Pos(FindText, dtMemo.Lines.Text); dtMemo.SelStart := SelPos - 1; dtMemo.SelLength := Length(Findtext); { Replace selected text with ReplaceText } dtMemo.SelText := ReplaceText; end; 不知有無它法可讓其速度如Excel一樣快? 謝謝。
你可以把那個.csv檔寄給我嗎? 我試試看!!!
系統時間:2024-04-20 12:37:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!