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

如何分辨中英文夾雜的字串中的中英文

答題得分者是:P.D.
湯圓仔
一般會員


發表:3
回覆:1
積分:0
註冊:2007-08-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-16 19:26:13 IP:59.121.xxx.xxx 訂閱
我用Reg讀進去後,發現遇到中文會出現亂碼,我朋友告訴我分辨第一個byte有無大於127就行了
如果沒有就讀一個byte
但是改完後,執行結果還是依樣

以下是我的Code
[code delphi]
//讀進資料
Reg.ReadBinaryData(ComboBox1.Text '_bin',buf,sizeof(buf));
while (buf[i]<>0) and( i<= 255) do begin
if buf[i] >= 127 then begin //第一個 byte > 127即可判斷不是常見字元如abcd,!@#
Memo1.lines.Text := Memo1.lines.Text chr(
StrToInt('0x' intToHex(buf[i],2) inttohex(buf[i 1],2)));
i := i 2;
end else begin
Memo1.lines.Text := Memo1.lines.Text chr(buf[i]);
i := i 1;
end;
end;

[/code]
請各位幫忙 謝謝
編輯記錄
湯圓仔 重新編輯於 2007-11-16 22:46:31, 註解 無‧
P.D.
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-17 16:56:44 IP:61.67.xxx.xxx 未訂閱
這是一個判斷是否為中文字的函數, 然後在切斷轉折時能不會把中文字切成兩半, 與你要的功能很類似, 既然你的程式都已完成七成以上, 我想看這個範例, 應該不難應用到你的程式中, 重點就是一個函數的判斷

[code delphi]
function WordsWrap(instr: string; cutlength: integer): string;
var sCuted: string;
temp: string;
iCutLength: integer;
j: integer;
bIsDBCS: boolean;
begin
temp:= '';
// 截出 _LengthPerLine 個字元出來
iCutLength:= cutlength;
repeat
sCuted:= Copy(instr, 1, iCutLength);
iCutLength:= Length(sCuted);
bIsDBCS:= False;
// 看看最後一個字元是不是中文的前半個字
for j:= 1 to iCutLength do begin
if bIsDBCS then bIsDBCS:= False
else if Windows.IsDBCSLeadByte(byte(sCuted[j])) then bIsDBCS:= True;
end;
// 如果最後一個字是中文的話, 少截一個字元
if bIsDBCS then Dec(iCutLength);
temp:= temp (Copy(instr, 1, iCutLength)) #13;
instr:= Copy(instr, iCutLength 1, Length(instr) - iCutLength);
until Length(instr) <= 0;
result:= temp;
end;

[/code]
湯圓仔
一般會員


發表:3
回覆:1
積分:0
註冊:2007-08-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-12-30 16:11:28 IP:59.121.xxx.xxx 訂閱
謝了!!!
系統時間:2024-04-24 17:53:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!