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

StringReplace 特異功能?

答題得分者是:Justmade
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-22 23:56:23 IP:61.66.xxx.xxx 未訂閱
請問各位 str:= '三福路三段三巷30-3號三樓' 有沒有辦法可以一次就更換成 str:= '三福路三段3巷30-3號3樓' 謝謝!
Justmade
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-23 00:03:48 IP:218.16.xxx.xxx 未訂閱
str:= '三福路三段3巷30-3號3樓'    就可以囉   說笑一下。要走了明天幫你想。
timhuang
尊榮會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-23 00:46:27 IP:61.221.xxx.xxx 未訂閱
目標先列. 一個簡單的想法. 可以用 段. 路. 街. 來分割. 之後的 三 都改為 3 但是這是用反向的方式來進行. 容易發生問題.  用正向的想法來解決的話, 應該這樣. 三巷. 三弄. 三號. 三樓 要改為 3巷. 3弄. 3號. 3樓  這樣比較完整.  至於單就這一題來看的話. 當然兩種方法都行囉. 但如何 "一次" 就完成. 就看你的一次的定義囉... 
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-23 00:46:53 IP:61.66.xxx.xxx 未訂閱
引言: str:= '三福路三段3巷30-3號3樓' 就可以囉 說笑一下。要走了明天幫你想。 < face="Verdana, Arial, Helvetica"> Justmade兄, 你真愛說笑話, 還在怪我沒有送分給你哦! 我也是說笑一下! 這個轉換一共有3000萬筆, 所以不是我不願用for next 來做, 而是 1234567890-之還有在段,巷,弄,樓前的一二三四五六七八九O要 全數轉成半形的1234567890-. 可想其龐大的工作 PS:此資料庫有M$-SQL, 及 DBF 兩種
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-23 00:51:38 IP:61.66.xxx.xxx 未訂閱
引言: 目標先列. 一個簡單的想法. 可以用 段. 路. 街. 來分割. 之後的 三 都改為 3 但是這是用反向的方式來進行. 容易發生問題. 用正向的想法來解決的話, 應該這樣. 三巷. 三弄. 三號. 三樓 要改為 3巷. 3弄. 3號. 3樓 這樣比較完整. 至於單就這一題來看的話. 當然兩種方法都行囉. 但如何 "一次" 就完成. 就看你的一次的定義囉... < face="Verdana, Arial, Helvetica"> 哦! 我所謂的一次是把巷弄樓前的三一次換掉, 而不是用 for next 做三次 stringreplace() 因為 巷弄樓前有可能為一二三...O, 這已經要做10次LOOP, 如果再加上 段巷弄樓4次, 那就是轉換一個字串一共用10*4=40次STRINGREPLACE(), 那如果 3000萬筆, 天~~~~~
Justmade
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-23 11:31:44 IP:218.16.xxx.xxx 未訂閱
我想你也知道系統本身沒可能有已存在的函數一次過更替,所以一定要自己寫 函數來做 我的建議是,用 StringReplace 的程式碼來改 : 1. 先定一個 TStringList / TList (NumList) 零 一 二 ..... 2. 用 Offset 一個字一個字處理 (可能要先轉做 WideChar) 3. 先跳過不處理的區段 (如路段等) 4. 對每個字做 NumList.IndexOf 若 >= 0 便轉成相對的 index 這樣做應會比用多次 StringReplace 快很多
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-23 22:08:52 IP:61.66.xxx.xxx 未訂閱
引言: 我想你也知道系統本身沒可能有已存在的函數一次過更替,所以一定要自己寫 函數來做 我的建議是,用 StringReplace 的程式碼來改 : 1. 先定一個 TStringList / TList (NumList) 零 一 二 ..... 2. 用 Offset 一個字一個字處理 (可能要先轉做 WideChar) 3. 先跳過不處理的區段 (如路段等) 4. 對每個字做 NumList.IndexOf 若 >= 0 便轉成相對的 index 這樣做應會比用多次 StringReplace 快很多
瞭解, 雖然有點超出我的能力範圍, 不過參考原來的 StringReplace(), 我想辦法來改寫一個StringReplace()可以符合我的需求
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-24 01:34:00 IP:211.76.xxx.xxx 未訂閱
引言:
引言: 我想你也知道系統本身沒可能有已存在的函數一次過更替,所以一定要自己寫 函數來做 我的建議是,用 StringReplace 的程式碼來改 : 1. 先定一個 TStringList / TList (NumList) 零 一 二 ..... 2. 用 Offset 一個字一個字處理 (可能要先轉做 WideChar) 3. 先跳過不處理的區段 (如路段等) 4. 對每個字做 NumList.IndexOf 若 >= 0 便轉成相對的 index 這樣做應會比用多次 StringReplace 快很多
瞭解, 雖然有點超出我的能力範圍, 不過參考原來的 StringReplace(), 我想辦法來改寫一個StringReplace()可以符合我的需求
var i : integer; s,str:string; begin str:= '三福路三段三巷30-3號三樓'; i:=Pos('段', str); s:=copy(str,i,length(str)); stringreplace(s ... str:=copy(str,1,i-1) s; end;
系統時間:2024-11-22 23:20:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!