Delphi2.0を使用しています。
格納変数: wTEST1 : String;
wTEST2 : String;
文字列 ”テストanあいうえabc”
全角・半角が入り混じった文字列が入力されます。
20バイトまでを「wTEST1」に代入
20バイト超えた分を「wTEST2」に代入
というふうに分割したいのですが、
マルチバイトの処理の仕方がいまいちわかりません。
ご教授お願いいたします;;
ちなみにヘルプを見てもByteType関数やWideStringが出てこないのですが、
使用できるようになるバージョンいくつからなのでしょうか??
文字数関係なく単純にバイトで区切るのであれば、
LEFTBSTR(***,20)をwTEST1に代入し、残りも同じように
セットすればいいのでは。
返信ありがとうございます!
でも、その場合2バイト文字が入ってきた場合、
おかしくなりませんか??
説明不足でした;;
もし、20バイト目が2バイト文字の1バイト目だった場合、
21バイトまでを「wTEST1」に代入したかったのです。
> もし、20バイト目が2バイト文字の1バイト目だった場合、
D2 だと、この判断は簡単ではないです。
API の IsDBCSLeadByte(s[20]) が false の場合は、そこで切っても大丈夫。
問題は true のときですが、 「2バイト文字の1バイト目」である可能性があります。
その場合は、先頭から順に確認する必要があります。
Delphi2?
まぁ どのバージョンでも違いはないけど。
じゃあ Jstrm.pasってのが どこかにころがっていたから使えば?
IsSencond ってので 簡単にわかるよ
あとその JLength; ってのがバグあるから修正したほうがいいけど
IsDBCSLeadByte
APIならCDの中にヘルプがはいっている。
\Jphelp\API32WH.HLP
> まぁ どのバージョンでも違いはないけど。
SysUtils の ByteType 関数が使えるかどうかでバージョンによる差があります。
一応解決かな??
返信ありがとうございます!
IsDBCSLeadByteを使って、なんとかできました!
1バイトごとに確認するようにしました。
あと、出来れば、aさんのやり方もやってみよう!っと思ったのですが、
Jstrm.pas っていうのが、検索しても見つからないのです;;
D2でも入っているのでしょうか??
http://www6.airnet.ne.jp/~sone_san/delphi/compo/miscella.html#MI0046
返信ありがとうございました!
Jstrm.pas がデフォルトで入ってるものだと、勘違いしてました!
お手数をおかけしました!
さっそくダウンロードして試してみまっす!
ツイート | ![]() |