Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

半角/全角文字混在データの分割方法

VB6.0にて、あるデータ項目の内容を、画面上の2つの表示領域に分割して セットする方法を教えて下さい。 あるファイルの項目として、「住所」という項目があるとします。 このデータを取得し、画面に表示する際に、「住所1」「住所2」とに分割して、 セットします。 この場合、ファイル上の「住所」は、キャラクタタイプで40バイトと定義されており、 ”半角/全角文字混在”でデータが格納されています。 画面上の、「住所1」「住所2」はそれぞれ、20バイトとします。 この様な条件で、単純に取得したデータを2分割すると、 取得したデータが、全て半角か全角なら問題はないのですが、 例えば、1文字目が半角で、以降が全て全角文字だった場合に、 最後の全角文字がぴったり収まらなくなり、うまく表示できないように思います。 また、文字を取得する際に、使用している、Mid(MidB)関数やLen(LenB)関数も、 うまく利用できていないようです。(コード体系の違いでしょうか?) どなたかご教授下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • gokkun
  • ベストアンサー率47% (115/244)
回答No.3

#1で回答した者です。 #1で示したソースプログラムで理解されると思いますが 念のため補足を致します。 ソースプログラムを実行するとシフトJISコード換算で 住所の21バイト目が全角の2バイト目にあたる場合、 address1には19バイト分の文字列、address2には 20バイト目(全角の1バイト目)以降の文字列が格納されます。 例) "123456789全角456789全角・・・" → address1="123456789全角456789" ├─ LenB(work)=21 ─┤      address2="全角・・・"

BAD_LIFE
質問者

お礼

1つめに頂いたご回答とあわせて、ありがとうございました。 サンプルコードまでご提供頂き大変助かりました。 今後もなにかあればまたよろしくお願い致します。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.2

シフトJISに変換して分割した後に、分割した部分が漢字の第一バイトと第二バイトの間かどうかをチェックしておいた方が良いでしょうね。 単純にバイト数で切ると、文字化けになる可能性があります。

BAD_LIFE
質問者

お礼

ありがとうございました。 参考になりました。

すると、全ての回答が全文表示されます。
  • gokkun
  • ベストアンサー率47% (115/244)
回答No.1

Mid関数やLen関数は文字単位で処理されますので 全角も半角もそれぞれ1文字として扱われます。 また、MidB関数やLenB関数はバイト単位で処理されますが VB内部ではUnicode仕様になっていて全角も半角もそれぞれ 2バイトとして扱われます。 ですので、次のようにStrConv関数を使って文字列をUnicodeでなく システムの既定のコード体系(通常はSHIFT-JIS)に変換して処理すれば うまく表示することが出来ると思います。 Dim address1 As String, address2 As String Dim work As String Dim ii As Integer For ii = 1 To Len(address) '住所の文字数分繰り返す work = Left(address, ii) '1文字,2文字・・・と順番に住所を切り出す work = StrConv(work, vbFromUnicode) 'Unicodeからシステムの既定のコードに変換 If (LenB(work) > 20) Then '20バイトを超えたらEXIT Exit For 'EXITするとaddress2の先頭文字位置がiiに格納される End If Next ii address1 = Left(address,ii-1) '住所1 address2 = Mid(address,ii) '住所2

すると、全ての回答が全文表示されます。

関連するQ&A