-PR-
解決済み

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

  • すぐに回答を!
  • 質問No.71168
  • 閲覧数5840
  • ありがとう数8
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 57% (15/26)

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

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

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

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

どなたかご教授下さい。
よろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル11

ベストアンサー率 47% (115/244)

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

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

例)
"123456789全角456789全角・・・" → address1="123456789全角456789"
├─ LenB(work)=21 ─┤      address2="全角・・・"
お礼コメント
BAD_LIFE

お礼率 57% (15/26)

1つめに頂いたご回答とあわせて、ありがとうございました。
サンプルコードまでご提供頂き大変助かりました。
今後もなにかあればまたよろしくお願い致します。
投稿日時 - 2001-05-04 22:58:54
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル11

ベストアンサー率 47% (115/244)

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


  • 回答No.2
レベル13

ベストアンサー率 26% (511/1924)

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

お礼率 57% (15/26)

ありがとうございました。
参考になりました。
投稿日時 - 2001-05-04 22:57:22
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ