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

請問有關中英文數字混雜的字串拆解問題

答題得分者是:dllee
hsu6536
一般會員


發表:3
回覆:5
積分:1
註冊:2002-06-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-24 11:50:17 IP:219.90.xxx.xxx 未訂閱
請問一下,今天我有一個String可能是中英文及數字混雜的狀況 譬如"2000中文字ET"這樣一個字串,而我如何只取出該字串的中文呢? 我搜尋過站上的文章,大致上都是Delphi的 然後我試著將其轉換成BCB的方式卻都有些問題, 因此我直接把這些寫成單獨的Delphi Unit然後在BCB中include進來 可是效果卻不是我想要,我想或許是我有做錯吧 (因為我目前沒有delphi環境所以無法trace) 以下是我抄自站上的一種作法 function GetStr(sStr: String): String; Var sTmp: String; i: Integer; bLen: word; begin sTmp := ''; bLen := Length(sStr); for i:=1 to bLen do begin if Windows.IsDBCSLeadByte(Byte(sStr[i])) then sTmp := sTmp sStr[i]; end; Result := sTmp; end; 這個方法我呼叫後會抓到NULL,此外我也試過其他的方法 利用 WildString >= 2的那種,可是也是有些問題,因為產出的字串會有亂碼 然後我也試過將這些方法寫成BCB的,但是一樣有問題... 所以懇請各位善心人士、四方高手們幫幫我吧...我卡在這個問題一天了 =.= 可能的話,可以用BCB告訴我該如何處理嗎?畢竟我目前是用BCB再寫程式的... -- No Signature!
------
No Signature!
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-24 12:39:05 IP:61.231.xxx.xxx 未訂閱
AnsiString __fastcall GetStr(AnsiString sStr)
{
  AnsiString sTmp=EmptyStr;
  for(int i=1; i    沒空更新的網頁...
http://dllee.ktop.com.tw   C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org  介紹Shells,LiteStep,GeoShell....    發表人 - dllee 於 2003/06/24  13:19:17
        
------
http://www.ViewMove.com
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-24 12:49:35 IP:63.84.xxx.xxx 未訂閱
哇...剛看完, dllee就轉換完了 class="code"> AnsiString __fastcall GetStr(AnsiString sStr) { AnsiString sTmp=EmptyStr; for(int i=1; i 這樣看起來不就非常的乾淨利落了嗎 發表人 -
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-24 13:15:27 IP:61.231.xxx.xxx 未訂閱
哈哈!應該是原作者對 Delphi 還不夠熟吧,像在 Delphi 中,應該不必宣告 sTmp 直接就可以用 Result 來運算,如:(dllee 之 Delphi 亂寫  ) < class="code"> function GetStr(sStr: String): String; Var i: Integer; begin for i:=1 to Length(sStr) do if Windows.IsDBCSLeadByte(Byte(sStr[i])) then begin Result := Result sStr.SubString(i,2); i := i 1; end; end; 這樣看起來應該好點 <>沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
hsu6536
一般會員


發表:3
回覆:5
積分:1
註冊:2002-06-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-24 13:20:39 IP:219.90.xxx.xxx 未訂閱
謝謝兩位的大力幫助^_^ 我終於知道自己的問題出在哪裡了 =.=||| 之前轉換成BCB後也使用過類似的寫法,但是卻一直沒想到要取兩個Byte 再者,可以讓我再請教一下嗎? 我有看之前的文章說IsDBCSLeadByte的用法在效率上是比較慢的 那如果我有大量的這類資料需要處理,是否這種方法會不好呢? 還有就是,其實我還是想瞭解一下之前的POST http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20191 WildString這種方法的依據是什麼呢?為什麼可以判斷大於2就是中文??? 而且在BCB中這不是16進制的嗎?所以很多做起來明明是數字但是也會大於2啊 實在是有點搞不太清楚:p === 其實說delphi寫起來不乾淨俐落,好像也不太對 因為是我把delphi寫的太複雜了...=.=" -- No Signature!
------
No Signature!
hsu6536
一般會員


發表:3
回覆:5
積分:1
註冊:2002-06-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-24 13:28:48 IP:219.90.xxx.xxx 未訂閱
引言: 哈哈!應該是原作者對 Delphi 還不夠熟吧,像在 Delphi 中,應該不必宣告 sTmp 直接就可以用 Result 來運算,如:(dllee 之 Delphi 亂寫 ) < face="Verdana, Arial, Helvetica"> 小小聲的偷講,其實我是知道可以這樣寫的 只是,從以前習慣就是宣告一些變數來做處理, 而且也從來都不在乎程式變肥 所以就變這樣了... 尤其是在測試的時候...變數宣告得尤其多 直到功能差不多的時候才會慢慢修正啊 --
------
No Signature!
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-24 19:30:03 IP:61.224.xxx.xxx 未訂閱
WideString 我是沒用過啦,您可以試試看用大量的文字,例如開一個檔案去比較兩者運算的時間。    沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-25 09:27:01 IP:63.84.xxx.xxx 未訂閱
不然就是針對WideString再開一個標題, 有研究的大大就會有所回應囉
系統時間:2024-05-18 7:02:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!