Uses StrUtils; var i: integer; begin for i:=0 to Memo1.Lines.count do Memo2.Lines.Add(LeftStr(Memo1.Lines.Strings[i],15)); end;
//最长取15位,当第15位是一个双字节字符的第一个字节时,取14位 procedure TForm1.Button1Click(Sender: TObject); var i, n: Integer; s: String; begin Memo2.Lines.Clear; for i := 0 to Memo1.Lines.Count - 1 do begin s := Memo1.Lines[i]; n := 1; while (n < 15) and (n <= Length(s)) do begin if Ord(s[n]) >= $80 then Inc(n, 2) else Inc(n); end; Memo2.Lines.Add(Copy(s, 1, n)); end; end;
改一下,上面那个有问题 --------------------------- procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; s: String; b: Boolean; begin Memo2.Lines.Clear; for i := 0 to Memo1.Lines.Count - 1 do begin s := Memo1.Lines[i]; b := True; for j := 1 to 15 do if (not b) or (Ord(s[j]) >= $80) then b := not b; if b then Memo2.Lines.Add(Copy(s, 1, 15)) else Memo2.Lines.Add(Copy(s, 1, 14)); end; end;
var
i: integer;
begin
for i:=0 to Memo1.Lines.count do
Memo2.Lines.Add(LeftStr(Memo1.Lines.Strings[i],15));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, n: Integer;
s: String;
begin
Memo2.Lines.Clear;
for i := 0 to Memo1.Lines.Count - 1 do
begin
s := Memo1.Lines[i];
n := 1;
while (n < 15) and (n <= Length(s)) do
begin
if Ord(s[n]) >= $80 then
Inc(n, 2)
else
Inc(n);
end;
Memo2.Lines.Add(Copy(s, 1, n));
end;
end;
---------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: Integer;
s: String;
b: Boolean;
begin
Memo2.Lines.Clear;
for i := 0 to Memo1.Lines.Count - 1 do
begin
s := Memo1.Lines[i];
b := True;
for j := 1 to 15 do
if (not b) or (Ord(s[j]) >= $80) then
b := not b;
if b then
Memo2.Lines.Add(Copy(s, 1, 15))
else
Memo2.Lines.Add(Copy(s, 1, 14));
end;
end;
Copy('一二三四五六七八九十一二三四五六', 1, 15)的结果是“一二三四五六七八九十一二三四五”共30位
Copy('1234567890123456', 1, 15)的结果是“123456789012345”共15位
“混血”的位数就更不好说了