2バイト文字の扱い

解決


カウ  2005-07-06 21:20:12  No: 16225

Delphi2.0を使用しています。

格納変数:  wTEST1 : String;
            wTEST2 : String;

文字列  ”テストanあいうえabc”

全角・半角が入り混じった文字列が入力されます。
20バイトまでを「wTEST1」に代入
20バイト超えた分を「wTEST2」に代入
というふうに分割したいのですが、
マルチバイトの処理の仕方がいまいちわかりません。
ご教授お願いいたします;;

ちなみにヘルプを見てもByteType関数やWideStringが出てこないのですが、
使用できるようになるバージョンいくつからなのでしょうか??


んが  2005-07-06 21:29:37  No: 16226

文字数関係なく単純にバイトで区切るのであれば、
LEFTBSTR(***,20)をwTEST1に代入し、残りも同じように
セットすればいいのでは。


カウ  2005-07-06 22:11:04  No: 16227

返信ありがとうございます!
でも、その場合2バイト文字が入ってきた場合、
おかしくなりませんか??

説明不足でした;;
もし、20バイト目が2バイト文字の1バイト目だった場合、
21バイトまでを「wTEST1」に代入したかったのです。


anone  2005-07-06 22:23:41  No: 16228

> もし、20バイト目が2バイト文字の1バイト目だった場合、

D2 だと、この判断は簡単ではないです。

API の IsDBCSLeadByte(s[20]) が false の場合は、そこで切っても大丈夫。
問題は true のときですが、 「2バイト文字の1バイト目」である可能性があります。
その場合は、先頭から順に確認する必要があります。


a  2005-07-06 23:38:17  No: 16229

Delphi2?
まぁ  どのバージョンでも違いはないけど。
じゃあ  Jstrm.pasってのが  どこかにころがっていたから使えば?
IsSencond  ってので  簡単にわかるよ
あとその JLength;  ってのがバグあるから修正したほうがいいけど

IsDBCSLeadByte
APIならCDの中にヘルプがはいっている。
\Jphelp\API32WH.HLP


anone  2005-07-07 00:08:37  No: 16230

> まぁ  どのバージョンでも違いはないけど。

SysUtils の ByteType 関数が使えるかどうかでバージョンによる差があります。


カウ  2005-07-07 00:19:05  No: 16231

一応解決かな??
返信ありがとうございます!

IsDBCSLeadByteを使って、なんとかできました!
1バイトごとに確認するようにしました。

あと、出来れば、aさんのやり方もやってみよう!っと思ったのですが、
Jstrm.pas  っていうのが、検索しても見つからないのです;;
D2でも入っているのでしょうか??


ん?  2005-07-07 00:50:41  No: 16232

http://www6.airnet.ne.jp/~sone_san/delphi/compo/miscella.html#MI0046


カウ  2005-07-07 00:56:12  No: 16233

返信ありがとうございました!
Jstrm.pas  がデフォルトで入ってるものだと、勘違いしてました!
お手数をおかけしました!
さっそくダウンロードして試してみまっす!


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

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






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