アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB6.0にて、あるデータ項目の内容を、画面上の2つの表示領域に分割して
セットする方法を教えて下さい。

あるファイルの項目として、「住所」という項目があるとします。
このデータを取得し、画面に表示する際に、「住所1」「住所2」とに分割して、
セットします。
この場合、ファイル上の「住所」は、キャラクタタイプで40バイトと定義されており、
”半角/全角文字混在”でデータが格納されています。
画面上の、「住所1」「住所2」はそれぞれ、20バイトとします。

この様な条件で、単純に取得したデータを2分割すると、
取得したデータが、全て半角か全角なら問題はないのですが、
例えば、1文字目が半角で、以降が全て全角文字だった場合に、
最後の全角文字がぴったり収まらなくなり、うまく表示できないように思います。

また、文字を取得する際に、使用している、Mid(MidB)関数やLen(LenB)関数も、
うまく利用できていないようです。(コード体系の違いでしょうか?)

どなたかご教授下さい。
よろしくお願いします。

A 回答 (3件)

#1で回答した者です。


#1で示したソースプログラムで理解されると思いますが
念のため補足を致します。

ソースプログラムを実行するとシフトJISコード換算で
住所の21バイト目が全角の2バイト目にあたる場合、
address1には19バイト分の文字列、address2には
20バイト目(全角の1バイト目)以降の文字列が格納されます。

例)
"123456789全角456789全角・・・" → address1="123456789全角456789"
├─ LenB(work)=21 ─┤      address2="全角・・・"
    • good
    • 1
この回答へのお礼

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

お礼日時:2001/05/04 22:58

シフトJISに変換して分割した後に、分割した部分が漢字の第一バイトと第二バイトの間かどうかをチェックしておいた方が良いでしょうね。


単純にバイト数で切ると、文字化けになる可能性があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/05/04 22:57

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!