請問有關中英文數字混雜的字串拆解問題 |
答題得分者是:dllee
|
hsu6536
一般會員 發表:3 回覆:5 積分:1 註冊:2002-06-07 發送簡訊給我 |
請問一下,今天我有一個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 發送簡訊給我 |
AnsiString __fastcall GetStr(AnsiString sStr) { AnsiString sTmp=EmptyStr; for(int i=1; i
------
http://www.ViewMove.com |
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
哈哈!應該是原作者對 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 發送簡訊給我 |
謝謝兩位的大力幫助^_^
我終於知道自己的問題出在哪裡了 =.=|||
之前轉換成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 發送簡訊給我 |
引言: 哈哈!應該是原作者對 Delphi 還不夠熟吧,像在 Delphi 中,應該不必宣告 sTmp 直接就可以用 Result 來運算,如:(dllee 之 Delphi 亂寫 ) >>< face="Verdana, Arial, Helvetica"> 小小聲的偷講,其實我是知道可以這樣寫的 只是,從以前習慣就是宣告一些變數來做處理, 而且也從來都不在乎程式變肥 所以就變這樣了... 尤其是在測試的時候...變數宣告得尤其多 直到功能差不多的時候才會慢慢修正啊 --
------
No Signature! |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |