制限バイト数を越えた全角半角混在文字列を、超過文字切捨てて編集するには?

解決


うさぎ  2007-07-28 03:23:12  No: 137019

テキストボックスAには全角半角文字混在で格納されています。
これをバイト数制限のあるテーブル項目Bに左詰めで編集するにあたり、
その際にバイト数超過した文字は切り捨てたいのですが、どのようにした
らよいでしょうか?  最後の文字が半角か全角かは不定です。

例.
  テキストボックスA(制限なし)  :  "aいウ絵オ"  、  "カki句ケこ"
                          ↓
  テーブル項目B(制限4バイト)  :  "aいウ"      、  "カki"

単純にMidやLen関数を使っても、文字数でカウントされてしまい、うまく
いかずに困っています。
どなたか手ほどきよろしくお願いします。


うさぎ  2007-07-28 03:29:43  No: 137020

↑  ごめんなさい。例が一部間違っていたので訂正します。正しくは

例.
  テキストボックスA(制限なし)  :  "aいウ絵オ"  、  "カki句ケこ"
                          ↓
  テーブル項目B(制限4バイト)  :  "aいウ"      、  "カki"

です。(見苦しくて申し訳ありません。)


かさのば  2007-07-28 06:46:44  No: 137021

>>単純にMidやLen関数を使っても...
ということはVB6.0でしょうか?
混乱を防ぐためにも開発環境は明記しておいてください。

表題の件ですが、文字列の左端から指定したByte数だけ切り出す場合は
LeftB()関数を使用します。
また、半角1Byte全角2Byteととして切り出したい場合にはこれにStrConv()関数を使用し、一旦、文字列をUnicodeからShift_JISに変換します。

ただし、この方法だと全角文字がぶった切られて結果値に不正な文字が入り込んでしまうことがあるので、それを避けたければ、もう一工夫必要です。


うさぎ  2007-07-29 07:09:51  No: 137022

>かさのばさん

ありがとうございます。
環境はVB2005です。
単純に関数だけでは解決できないのですね。

あと、ここに表示した段階で全角に化けちゃいましたが、私の
上の例文中で記したカタカナは半角カタカナの意味あいです。
わかり辛くなってごめんなさい。


かさのば  2007-07-29 09:50:33  No: 137023

VB2005ですとStrConvの変わりにSystem.Text.Encodingが使えます。
GetEncodingメソッドでShift_JISの文字エンコーディングを作成し、
GetBytesメソッドで切り出したい文字列をByte配列に変換してから、GetStringメソッドで適当に切り取ります。

Tipsが紹介されているサイトがありましたのでご参考下さい。
http://jeanne.wankuma.com/tips/string/leftb.html

VB2005でもStrConv()とかは使えるらしいですが(環境が無いので試してません)
いずれにせよ、全角文字がぶった切られる場合の対応は必要かと思います。


VBレスキュー(花ちゃん)  2007-07-30 16:09:47  No: 137024

上記のサンプルでは、漢字が分断されてしまうので下記をお使い下さい。

指定バイト位置から指定バイト数分の文字列を取り出す関数
http://hanatyan.sakura.ne.jp/dotnet/moji06.htm

文字列を指定の幅(バイト数)にカットする(漢字分断回避)
http://hanatyan.sakura.ne.jp/dotnet/StrCut.htm


うさぎ  2007-07-31 03:31:38  No: 137025

>かさのばさん、VBレスキュー(花ちゃん)さん

おかげさまで解決することができました。

VBレスキュー(花ちゃん)さんからご紹介の
http://hanatyan.sakura.ne.jp/dotnet/moji06.htm
のサンプルコードを参考にして、今回VB2005向けに
  ControlChars.NullChar → "・" 
のように変えて実行したところ、うまくいきました。

VBのバージョンによってコーディングが異なるのは、
あとあとの保守がしんどいですね。何事も常に進化が
伴うので、仕方ないところではありますけど…。

今回、とても勉強になりました。
本当にありがとうございました。


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

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






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