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

解決


Amat  2008-05-20 00:51:35  No: 30740

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

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

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

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


めじな  2008-05-20 01:33:10  No: 30741

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


Amat  2008-05-20 02:19:33  No: 30742

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-20 03:26:56  No: 30743

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加