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

delphi中如何判斷某一字符是漢字還是標點符號﹖

尚未結案
lkr9
一般會員


發表:2
回覆:7
積分:1
註冊:2003-10-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-15 19:15:26 IP:218.244.xxx.xxx 未訂閱
謝謝﹗
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-15 19:32:56 IP:202.39.xxx.xxx 未訂閱
判斷是否為漢字: 1.IsDBCSLeadByte 2.CharNext 3.ByteType 至於標點符號, 可能得列出所有的標點符號來判斷了    --- 歡迎光臨 KTop 研究院
lkr9
一般會員


發表:2
回覆:7
積分:1
註冊:2003-10-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-16 14:10:10 IP:218.244.xxx.xxx 未訂閱
可以使用判斷字符內碼範圍的辦法﹖嗎具體什麼範圍﹖ 只要區別漢字與特殊符號就可以了。 謝謝斑竹﹗
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-16 14:54:51 IP:61.218.xxx.xxx 未訂閱
當然可以查內碼範圍,只是你可能要查GB碼,我只知道Big5  另一笨方法,不用查,列舉吧 < class="code"> procedure TForm1.Button1Click(Sender: TObject); var ts:WideString; flag:boolean; i:integer; begin ts:=',。:;”?!「」『』…'; for i :=1 to length(ts) do begin if ts[i]=edit1.Text then begin ShowMessage('標點符號') ; flag:=True; break; end; end; if not flag then ShowMessage('一般漢字'); end; 上列是全型的部份,半型的可自行加入,練習看看 < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8147403&CC=182217">
lkr9
一般會員


發表:2
回覆:7
積分:1
註冊:2003-10-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-19 14:45:36 IP:218.244.xxx.xxx 未訂閱
ddy:我就是想知道Big5的內碼﹐使用內碼漢字如何與特殊符號區別﹐您能告訴我嗎﹖ 謝謝您﹗
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-19 17:36:51 IP:203.67.xxx.xxx 未訂閱
lkr9 參考這二篇吧 【Delphi】【發表】中文字 <-----> Big5 互換範例 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26815 【Delphi】【分享】將字碼轉換至文字http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26356    利用 function txt2code(itxt: string): string; //由中文字取得big5 碼(hex) 取得Big5碼    
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-19 17:48:19 IP:203.67.xxx.xxx 未訂閱
function code2txt(icode: string): string;
//由big5 碼取得中文字
var
    wordHi, wordLo,i: integer;
begin
    for i:=0 to length(icode)-1 do
       if i mod 4=0 then
        begin
            //二種寫法皆可
//            wordLo := strtoint('$'+ icode[i+1]+icode[i+2]+icode[i+3]+icode[i+4]) and $FF;
            wordLo := strtoint('$'+ icode[i+3]+icode[i+4]);
            //取得低位元
//            wordHi := strtoint('$'+ icode[i+1]+icode[i+2]+icode[i+3]+icode[i+4]) shr 8;
            wordHi := strtoint('$'+ icode[i+1]+icode[i+2]);
            //取得高位元
            result := char(wordHi) + char(wordLo);
        end;
end;    procedure TForm1.Button1Click(Sender: TObject);
//產生Big5內碼檔
var
    ts:TStrings;
    sec, off: integer;
    ch: integer;
begin
    ts := TStringList.Create;
    try
        for sec := $A1 to $F9 do
        begin
            Application.ProcessMessages;
            for off := $40 to $7E do
            begin
                ch := sec * 256 + off;
                ts.Add(IntToHex(sec,2)+inttohex(off,2)+'='+code2txt(IntToHex(sec,2)+inttohex(off,2)));
            end;
            //0x7F - 0xA0 未定義
            for off := $A1 to $FE do
            begin
                ch := sec * 256 + off;
                ts.Add(IntToHex(sec,2)+inttohex(off,2)+'='+code2txt(IntToHex(sec,2)+inttohex(off,2)));
            end;
        end;
        ts.SaveToFile(IncludeTrailingBackslash(GetCurrentDir) + 'Big5Code.txt');
    finally
        ts.Free;
    end;
    ShowMessage('OK');
end;
這段會產生Big5Code.txt 文檔,內容如下: A140= A141=, A142=、 A143=。 A144=. A145=‧ A146=; A147=: A148=? A149=! A14A=︰ ............ 所有內碼的編號與符號的排列 從此得知,標點符號的區塊,介於 A141~A1AC 其中有部份是特殊符號,看你自己的判定是否屬標點符號囉 ps:上述程式碼只是節錄部份,請自行修改可執行
系統時間:2017-12-14 6:22:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!