掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
半角文字・全角文字のエラーチェックをするには・・・? (ID:83170)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 文字コードの変換等が必要なのでしょうか? VBの文字列は、Unicode(UTF-16)が利用されています。 この文字コードでは、どの文字も「2バイト」で表現されます。 (Shift_JISは、半角が1バイト、全角が2バイトですね) この違いにより、バイト単位の文字列操作が必要な場合は、 StrConv関数(のvbFromUnicodeやvbUnicode定数)を使って Unicode/Shift_JIS変換を行う事があります。 > レコード長をLen関数で聞き それでは駄目だと思いますよ。 VB6のLen関数は、文字数を返します。バイト数ではありません。 なので、半角の「abc」や、全角の「あいう」を渡したとしても、 どちらも Len関数では 3 が返される事になります。 バイト数を返す LenB という関数もありますが、先述したように、 VB6では、すべての文字が2バイトで表現されるので、結果として、 「LenBの値 = Lenの値 * 2」にしかなりません。 なので、StrConv関数でShift_JISに戻してから LenB を使う事になります。 あるいは、String型を使わず、Byte型配列を使うという手もあります。 Openステートメントでランダムアクセスモードを選び、Get #ステートメントで 読み込むようにすれば、固定長データを効果的に読み込む事ができます。 幸い、Byte配列とStringには互換性があり、 Dim s As String, b() As Byte s = "あいうえお123" b = s とすれば、配列変数bに、"あいうえお123"がUnicode形式で格納されますし、 逆に、Byte型の動的配列を、String型変数に代入することもできます。 # 下記サイトの 15番あたりが参考になるかも。 # http://www.interq.or.jp/www-user/komurak/progtec/ > 全角文字と半角文字の判別の仕方の 幾つかの方法がありますが、とりあえず簡単そうな物を。 案1: StrConv, Len, LenB関数を使って調べる。 「Unicode文字列でのLen関数の戻り値」と、 「Shift_JIS文字列でのLenB関数の戻り値」が 一致していたら、「すべて半角」とみなす方法です。 案2: Forループを使って1文字ずつ調べる。 文字の切り出しにはMid関数、文字の調査にはAsc関数を使います。 Asc関数で0〜255の範囲が返されれば半角、それ以外は全角という判定法です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.