テキストボックスAには全角半角文字混在で格納されています。
これをバイト数制限のあるテーブル項目Bに左詰めで編集するにあたり、
その際にバイト数超過した文字は切り捨てたいのですが、どのようにした
らよいでしょうか? 最後の文字が半角か全角かは不定です。
例.
テキストボックスA(制限なし) : "aいウ絵オ" 、 "カki句ケこ"
↓
テーブル項目B(制限4バイト) : "aいウ" 、 "カki"
単純にMidやLen関数を使っても、文字数でカウントされてしまい、うまく
いかずに困っています。
どなたか手ほどきよろしくお願いします。
↑ ごめんなさい。例が一部間違っていたので訂正します。正しくは
例.
テキストボックスA(制限なし) : "aいウ絵オ" 、 "カki句ケこ"
↓
テーブル項目B(制限4バイト) : "aいウ" 、 "カki"
です。(見苦しくて申し訳ありません。)
>>単純にMidやLen関数を使っても...
ということはVB6.0でしょうか?
混乱を防ぐためにも開発環境は明記しておいてください。
表題の件ですが、文字列の左端から指定したByte数だけ切り出す場合は
LeftB()関数を使用します。
また、半角1Byte全角2Byteととして切り出したい場合にはこれにStrConv()関数を使用し、一旦、文字列をUnicodeからShift_JISに変換します。
ただし、この方法だと全角文字がぶった切られて結果値に不正な文字が入り込んでしまうことがあるので、それを避けたければ、もう一工夫必要です。
>かさのばさん
ありがとうございます。
環境はVB2005です。
単純に関数だけでは解決できないのですね。
あと、ここに表示した段階で全角に化けちゃいましたが、私の
上の例文中で記したカタカナは半角カタカナの意味あいです。
わかり辛くなってごめんなさい。
VB2005ですとStrConvの変わりにSystem.Text.Encodingが使えます。
GetEncodingメソッドでShift_JISの文字エンコーディングを作成し、
GetBytesメソッドで切り出したい文字列をByte配列に変換してから、GetStringメソッドで適当に切り取ります。
Tipsが紹介されているサイトがありましたのでご参考下さい。
http://jeanne.wankuma.com/tips/string/leftb.html
VB2005でもStrConv()とかは使えるらしいですが(環境が無いので試してません)
いずれにせよ、全角文字がぶった切られる場合の対応は必要かと思います。
上記のサンプルでは、漢字が分断されてしまうので下記をお使い下さい。
指定バイト位置から指定バイト数分の文字列を取り出す関数
http://hanatyan.sakura.ne.jp/dotnet/moji06.htm
文字列を指定の幅(バイト数)にカットする(漢字分断回避)
http://hanatyan.sakura.ne.jp/dotnet/StrCut.htm
>かさのばさん、VBレスキュー(花ちゃん)さん
おかげさまで解決することができました。
VBレスキュー(花ちゃん)さんからご紹介の
http://hanatyan.sakura.ne.jp/dotnet/moji06.htm
のサンプルコードを参考にして、今回VB2005向けに
ControlChars.NullChar → "・"
のように変えて実行したところ、うまくいきました。
VBのバージョンによってコーディングが異なるのは、
あとあとの保守がしんどいですね。何事も常に進化が
伴うので、仕方ないところではありますけど…。
今回、とても勉強になりました。
本当にありがとうございました。
ツイート | ![]() |