文字列の切り出し(半角と全角)

解決


Amat  2008-05-19 15:51:35  No: 30740  IP: 192.*.*.*

1バイト文字と2バイト文字が混在している文字列にて、
左から○文字を切り出したとき、

  例)
    a:='あいうえおABCDE';
    ShowMessage(LeftStr(a , 6));    ⇒あいう
    b:='ABCDEあいうえお';
    ShowMessage(LeftStr(b , 6));    ⇒ABCDE・

全角文字の途中で切り出されると、
お尻が文字化けします。(2つめのパターン)

お尻が文字化けする場合には、
その1バイトを無視させたいのですが、どうしたら良いのでしょうか。
(2つめのパターンにおいて、  ABCDE  としたい)

編集 削除
めじな  2008-05-19 16:33:10  No: 30741  IP: 192.*.*.*

私はByteType関数を利用して判定し、文字化けしないような
関数を作って利用しています。

編集 削除
Amat  2008-05-19 17:19:33  No: 30742  IP: 192.*.*.*

ByteType関数、できました。
ありがとうございました。
//--------------------------------------------------------
case   ByteType(RightStr(Temp,1) ,1)  of
  { 半角 }
   mbSingleByte  :
      begin
        //何もしない
      end;
  { 全角の1バイト目 }
   mbLeadByte    :
      begin
        Temp := LeftStr(Temp , Length(Temp) -1);  //半角1文字分カット
      end;
  { 全角の2バイト目 }
   mbTrailByte   :
      begin
        //何もしない
      end;
   else
        //何もしない
end; { case }

編集 削除
もにゃ  2008-05-19 18:26:56  No: 30743  IP: 192.*.*.*

WideStringってのを使えばバイトタイプ気にしないで扱えます。
時代的にはこっちの方が良いとおもいます。

procedure TForm1.Button1Click(Sender: TObject);
var
 ws:widestring;
begin
  ws:='ABCDEあいうえお';
  caption:=Copy(ws,3,Length(ws));
end;

編集 削除