StringReplace 特異功能? |
答題得分者是:Justmade
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 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 發送簡訊給我 |
引言: 目標先列. 一個簡單的想法. 可以用 段. 路. 街. 來分割. 之後的 三 都改為 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 發送簡訊給我 |
我想你也知道系統本身沒可能有已存在的函數一次過更替,所以一定要自己寫 函數來做 我的建議是,用 StringReplace 的程式碼來改 : 1. 先定一個 TStringList / TList (NumList)
零
一
二
.....
2. 用 Offset 一個字一個字處理 (可能要先轉做 WideChar)
3. 先跳過不處理的區段 (如路段等)
4. 對每個字做 NumList.IndexOf 若 >= 0 便轉成相對的 index 這樣做應會比用多次 StringReplace 快很多
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 我想你也知道系統本身沒可能有已存在的函數一次過更替,所以一定要自己寫 函數來做 我的建議是,用 StringReplace 的程式碼來改 : 1. 先定一個 TStringList / TList (NumList) 零 一 二 ..... 2. 用 Offset 一個字一個字處理 (可能要先轉做 WideChar) 3. 先跳過不處理的區段 (如路段等) 4. 對每個字做 NumList.IndexOf 若 >= 0 便轉成相對的 index 這樣做應會比用多次 StringReplace 快很多瞭解, 雖然有點超出我的能力範圍, 不過參考原來的 StringReplace(), 我想辦法來改寫一個StringReplace()可以符合我的需求 |
aip999
初階會員 發表:10 回覆:63 積分:44 註冊:2002-03-29 發送簡訊給我 |
引言: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;引言: 我想你也知道系統本身沒可能有已存在的函數一次過更替,所以一定要自己寫 函數來做 我的建議是,用 StringReplace 的程式碼來改 : 1. 先定一個 TStringList / TList (NumList) 零 一 二 ..... 2. 用 Offset 一個字一個字處理 (可能要先轉做 WideChar) 3. 先跳過不處理的區段 (如路段等) 4. 對每個字做 NumList.IndexOf 若 >= 0 便轉成相對的 index 這樣做應會比用多次 StringReplace 快很多瞭解, 雖然有點超出我的能力範圍, 不過參考原來的 StringReplace(), 我想辦法來改寫一個StringReplace()可以符合我的需求 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |