- PR -

Hex関数とASC関数について(vb.netとvb6.0の違い)

1
投稿者投稿内容
まよ
会議室デビュー日: 2006/02/18
投稿数: 1
投稿日時: 2006-02-18 21:43
はじめて投稿します。
初心者な為、わかりづらい表現かもしれませんがお許しくださいませ。

文字列データ(Data)に外字文字が存在する場合、■に置き換える
プログラムを作成しております。
****************************************************************************
Private Function CheckMoji(ByVal Data As String) As String
  Dim strDt As String
  Dim strMix As String
  strMix = ""
  For i = 1 To Data.Length '文字列データの文字数を取得
    strDt = Mid(Data, i, 1)
    If Hex(Asc(strDt)) >= "F040" And Hex(Asc(strDt)) <= "FCFC" Then
      strMix = strMix & "■"
    Else
      strMix = strMix & strDt
    End If
  Next
  :
  :

※文字列データ(Data)に外字文字が存在します。
*****************************************************************************
文字列データ(2バイト)をHex(Asc(strDt))でMsgbox表示すると頭4桁"FFFF"となり
■に置き換えることができません。
※ちなみに同じソースでVB6で実行すると置き換わります。

VB.NETでは、2バイト文字をHex(Asc(文字列データ))すると必ず頭4桁に"FFFF"が付くのでしょうか?

  If Hex(Asc(strDt)) >= "FFFFF040" And Hex(Asc(strDt)) <= "FFFFFCFC" Then
    strMix = strMix & "■"
  Else
    strMix = strMix & strDt
  End If

のようなやり方でよいのでしょうか?
また、別の方法がございましたらご教授お願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-18 22:02
Hex を使わなければならない理由がわからないのですが...
数値にしたものを、再度文字列にする必要があるのでしょうか?
文字コードを比較する以上は、数値で検証すべきだと思いますが...

コード:

    Private Shared Function HideInvalidChar(ByVal target As String) As String 
        Dim returnString As String = String.Empty

      For i As Integer = 0 To target.Length - 1字数を取得
            Dim targetChar As Char = target.Chars(i)

            If Asc(targetChar) >= &HF040 AndAlso Asc(targetChar) <= &HFCFC Then
                returnString = returnString & "■"
        Else
                returnString = returnString & targetChar
        End If
      Next i

        Return returnString
    End Function


適当ですが、こういう感じで良いのではないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-18 22:08
あ、Hex メソッドを使わなかったら使わなかったで、負数になること自体は免れませんねw

引用:

まよさんの書き込み (2006-02-18 21:43) より:

文字列データ(2バイト)をHex(Asc(strDt))でMsgbox表示すると頭4桁"FFFF"となり
■に置き換えることができません。


AscW メソッドを使ってください。

引用:

VB.NETでは、2バイト文字をHex(Asc(文字列データ))すると必ず頭4桁に"FFFF"が付くのでしょうか?


正しくは Asc メソッドの時点で、ですね。

引用:

  If Hex(Asc(strDt)) >= "FFFFF040" And Hex(Asc(strDt)) <= "FFFFFCFC" Then
    strMix = strMix & "■"
  Else
    strMix = strMix & strDt
  End If

のようなやり方でよいのでしょうか?


Hex メソッドは要らないというところは先の説明と同じです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)