tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルTRIM関数の制御について
記事No11677
投稿日: 2016/05/25(Wed) 15:32
投稿者SUZUKI
VB6.0からVB2005に変換中のSUZUKIです
コードの変換ではお世話になりました
今は動きの検証をしているのですがTRIM関数の制御ができません
(空白の制御)

VB6.0
  MOJI  AS STRING * 5
VB2005
<VBFixedString(5)> Public  MOJI  As String

上記のような定義となっています
構造体をLWとします

LW.MOJI は自分では空白と思っているですが
値不定と言った方が正しいかも知れません
デバッグでは値出てきません

Select Case Microsoft.VisualBasic.Strings.Trim(LW.MOJI)
 ' SELECT CASE TRIM(LW.MOJI) でも同じ

   CASE ""  
    MSGBOX("空白である")

   CASE ELSE
    MSGBOX("空白で無い")

END SELECT

にすると
空白で無いとメッセージになってしまいます
VB6.0では確実に空白であるに流れます

TRIM関数の動きが変わった為と思われますが
検索するとたくさん出るのですがよくわかりません

よろしくお願いします

[ツリー表示へ]
タイトルRe: TRIM関数の制御について
記事No11678
投稿日: 2016/05/25(Wed) 15:52
投稿者魔界の仮面弁士
> LW.MOJI は自分では空白と思っているですが

Trim の動作を調査する前に、まずは、大元の値の内容を具体的に調べてみましょう。


> デバッグでは値出てきません

'VB6
length = Len(LW.MOJI)
Debug.Print "Length="; length
For N = 1 To length
    Debug.Print Hex(AscW(N))
Next


'VB.NET
If LW.MOJI IsNot Nothing Then
 Dim length As Integer = LW.MOJI.Length
 Debug.WriteLine("Length=" & CStr(length))
 For Each C As Char In LW.MOJI.ToArray()
    Debug.WriteLine(AscW(C).ToString("X"))
 Next
End If

[ツリー表示へ]
タイトルRe^2: TRIM関数の制御について
記事No11679
投稿日: 2016/05/25(Wed) 16:48
投稿者SUZUKI
魔界の仮面弁士さん 
調べ方を教えていただきありがとうございます

> 'VB6
> length = Len(LW.MOJI)
> Debug.Print "Length="; length
> For N = 1 To length
>     Debug.Print Hex(AscW(N))
> Next

N を若干修正しまして (MID関数)

20 20 20 20 20

と出ました 


>
>
> 'VB.NET
> If LW.MOJI IsNot Nothing Then
>  Dim length As Integer = LW.MOJI.Length
>  Debug.WriteLine("Length=" & CStr(length))
>  For Each C As Char In LW.MOJI.ToArray()
>     Debug.WriteLine(AscW(C).ToString("X"))
>  Next
> End If

上記ですが 自力で直せず申し訳ありません
4行目
ToARRAYは'string'のメンバーではありませんという
エラーになるのですが
対応教えてもらえないでしょうか

[ツリー表示へ]
タイトルRe^3: TRIM関数の制御について
記事No11680
投稿日: 2016/05/26(Thu) 10:31
投稿者魔界の仮面弁士
> N を若干修正しまして (MID関数)
おおう、肝心なところが漏れてました。orz

For n = 1 To length
 C = Mid(LW.MOJI, n, 1)
 Debug.Print Hex(AscW(C))
Next


> ToARRAYは'string'のメンバーではありませんという
すみません、そういえば VB2005 でしたね…。

ToArray を利用できるのは、VB2008以上(かつ、System.Linq 名前空間が Imports されていること)が
前提条件でした。


> 対応教えてもらえないでしょうか
「For Each C As Char In LW.MOJI.ToArray()」の代わりに
「For Each C As Char In LW.MOJI」あるいは
「For Each C As Char In LW.MOJI.ToCharArray()」を
試してみてください。


提示コードの確認が甘く、失礼しました。

[ツリー表示へ]
タイトルRe^4: TRIM関数の制御について
記事No11681
投稿日: 2016/05/26(Thu) 14:50
投稿者SUZUKI
回答ありがとうございます
試したのですが、最初コードが 0 0 0 0 0  と出て
コードが間違っていると思い .ToString("X")を
はずしたり "X"を取ってみたりで色々思考錯誤してしまいました
そのうち コードが 20 20 20 20 20 とVB6.0と
同じになり CASE "" の方に流れるようになりました
結果としてはVB6.0と同じ流れになり
逆に違う方向に処理させる事が出来なくなりました


文字コードの処理の仕方を教えてもらったので
次回、発生した時はうまく対応出来ると思います
再現出来なくなり申し訳無く
一度閉じさせていただきます
ありがとうございました

[ツリー表示へ]
タイトルRe^5: TRIM関数の制御について(解決)
記事No11682
投稿日: 2016/05/26(Thu) 16:11
投稿者SUZUKI
1回閉じてまたレスして申し訳ありません
やはり気になり昨日のバックアップからデータを戻しました
すると下記の事が判明しました
結論としては、データとしてはアスキー文字でなく変な文字が
入っていた

再度 VB6.0の開発環境で文字を選択すると
”・・・・・”となっており 
結果も 0 0 0 0 0 でした
VB6.0もELSE側に流れます

ただ、VB2005の開発環境で文字を選択すると
””
結果 0 0 0 0 0

VB2005の開発環境ではゴミが入った時、わかりにくいという
事が判明しました
色々お世話になりありがとうございました

[ツリー表示へ]