中文字的截取 |
尚未結案
|
sangya
一般會員 ![]() ![]() 發表:21 回覆:46 積分:13 註冊:2002-04-15 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi sangya, 關於中文字擷取,你可以參考以下討論 http://delphi.ktop.com.tw/topic.php?topic_id=40745
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40612
------
Fishman |
change.jian
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
如果你只是為了要解決在截掉過長的字串,會發生拆到一個中文字的情況的話,可以運用wideString的型態來處理.在wideString裡,一個字就是一個字,不管是中文字或英文.範例如下,您試試:
var ws:WideString; s:String; begin s:=Copy(Edit1.Text,1,25); //25表示你的欄位最長為25碼 ws:=s; //轉成WideString Edit2.Text:=Copy(ws,1,Length(ws)); //再截一次即可 end; |
speedup
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
用Windows API IsDBCSLeadByte可用來判定某Char是否為雙Byte字元(即中文字)
的前導Byte
function TruncateChinese(str:string):string; begin result := str; if (length(str) >= 25) and(IsDBCSLeadByte(Byte(str[25]))) then result := Coyp(str,1,24) else result := Coyp(str,1,25); end;混心雜欲 棄修身~唉 發表人 - speedup 於 2004/07/21 09:37:18
------
唉~ |
fangwy
中階會員 ![]() ![]() ![]() 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
我常需处理这个问题,因此我做了一个函数fStrCopy代替DELPHI的Copy,具体做法是:判断每个字符,并统计英文,数字的字符个数及中文字符的个数,如果在截取范围内中文字符个数为单数就多取一个字符.代码如下:
其中viBeg返回下一次截取的位置,如要求截取10个字符,但实际截取了11个,这viBeg返回12.
虽然是笨方法,但很有效
function fStrCopy(vsStr: string; var viBeg: integer; viLen: integer): string;
var
i, j: integer;
dsTmp: string;
daTmp: array[0..1023] of char;
begin
ZeroMemory(@daTmp, 1023);
dsTmp := Copy(vsStr, viBeg, viLen);
if Length(dsTmp) = viLen then
begin
Move(PChar(dsTmp)^, daTmp, viLen);
j := 0;
for i := 0 to viLen - 1 do
begin
if (daTmp[i] < #32) or (daTmp[i] > #126) then
begin
j := j 1;
end;
end;
if (j mod 2) = 1 then
begin
//因发票打印空间较小,为防止超出表格统一少取一个字符
dsTmp := Copy(vsStr, viBeg, viLen - 1);
viBeg := viBeg viLen - 1;
end
else
begin
viBeg := viBeg viLen;
end;
end
else
begin
viBeg := viBeg Length(dsTmp);
end;
fStrCopy := dsTmp;
end;
|
sangya
一般會員 ![]() ![]() 發表:21 回覆:46 積分:13 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |