文字列の中にあるNULLを削除するには? への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/3/11 07:44:38
> ブレークポイントで、文字列を表示すると、"" になっています。
そのチェック方法では、非可読文字のチェックには向かないかと。
先のコードでいうと「S2」は "" ではありませんが、
表示上は "" であるかのように見えてしまいますから。
S2, S4, S5 のいずれのパターンに相当するのか、再確認してみてください。
その結果、たとえば S2 のパターンだとしたら、
Dim newText As String = Replace( 元のテキスト, vbNullChar, "")
という記述になるでしょう。
> If 文字列 = Nothing Then
その記述は不自然です。そもそも、
「If 文字列 Is Nothing Then」と
「If 文字列 = Nothing Then」の違いは理解されていますでしょうか。
「S3」の場合、どちらの書き方でも True となりますが、
「S4」の場合、= は True ですが、Is だと False になる事に注意してください。
そのチェック方法では、非可読文字のチェックには向かないかと。
先のコードでいうと「S2」は "" ではありませんが、
表示上は "" であるかのように見えてしまいますから。
S2, S4, S5 のいずれのパターンに相当するのか、再確認してみてください。
その結果、たとえば S2 のパターンだとしたら、
Dim newText As String = Replace( 元のテキスト, vbNullChar, "")
という記述になるでしょう。
> If 文字列 = Nothing Then
その記述は不自然です。そもそも、
「If 文字列 Is Nothing Then」と
「If 文字列 = Nothing Then」の違いは理解されていますでしょうか。
「S3」の場合、どちらの書き方でも True となりますが、
「S4」の場合、= は True ですが、Is だと False になる事に注意してください。
投稿者 VB2008初心者  (社会人)
投稿日時
2009/3/11 06:41:19
魔界の仮面弁士さん 返信がおそくなってしまい申し訳有りませんでした!
>ここでいう「文字列の中にあるNULL」とは、以下のどれに相当しますか?
ブレークポイントで、文字列を表示すると、"" になっています。
そこで、If 文字列 = "" Then
ステートメント 'ステップ実行すると、このステートメントは実行されません
End If
また、 If 文字列 = Nothing Then
ステートメント 'ステップ実行すると、このステートメントは実行されません
End If
としてみても、ステートメント は実行されません。
データをテキストファイルに出力して、バイナリダンプしたら、コードが "00"になっているので
Nullだと思っています。
>置き換えだけなら存在判定は不要で、常に Replace してしまえば良いかと思います。
上記のケースでは、NULL文字 は何を指定したら良いのでしょうか?
>ここでいう「文字列の中にあるNULL」とは、以下のどれに相当しますか?
ブレークポイントで、文字列を表示すると、"" になっています。
そこで、If 文字列 = "" Then
ステートメント 'ステップ実行すると、このステートメントは実行されません
End If
また、 If 文字列 = Nothing Then
ステートメント 'ステップ実行すると、このステートメントは実行されません
End If
としてみても、ステートメント は実行されません。
データをテキストファイルに出力して、バイナリダンプしたら、コードが "00"になっているので
Nullだと思っています。
>置き換えだけなら存在判定は不要で、常に Replace してしまえば良いかと思います。
上記のケースでは、NULL文字 は何を指定したら良いのでしょうか?
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/3/11 02:51:35
ここでいう「文字列の中にあるNULL」とは、以下のどれに相当しますか?
> NULLかどうかを判定する方法を知りたくて投稿しました。
置き換えだけなら存在判定は不要で、常に Replace してしまえば良いかと思います。
Dim S1 As String = "NULL"
Dim S2 As String = ChrW(0) 'もしくは = vbNullChar
Dim S3 As String = Nothing
Dim S4 As String = "" 'もしくは = String.Empty
'Dim S5 As String = その他
> NULLかどうかを判定する方法を知りたくて投稿しました。
置き換えだけなら存在判定は不要で、常に Replace してしまえば良いかと思います。
Dim newText As String = Replace( 元のテキスト, NULL文字, "")
[NULL文字]の部分は、先の S1~S5 のいずれかの値になるでしょう。
投稿者 VB2008初心者  (社会人)
投稿日時
2009/3/11 02:01:55
お世話になります。
文字列の中にNULLが有ったら、そのNULLを""(空白:Nothing)に置き換えたいのですが、
NULLかどうかを判定する方法を知りたくて投稿しました。
何方かご教授お願いします。
データベースの場合は、If Not TypeOf SqlReader("TEST-AA") Is DBNull Then
などで判定出来ますが、テキストデータから文字列変数へ格納する場合に判定する時の
やり方が分かりません。
文字列の中にNULLが有ったら、そのNULLを""(空白:Nothing)に置き換えたいのですが、
NULLかどうかを判定する方法を知りたくて投稿しました。
何方かご教授お願いします。
データベースの場合は、If Not TypeOf SqlReader("TEST-AA") Is DBNull Then
などで判定出来ますが、テキストデータから文字列変数へ格納する場合に判定する時の
やり方が分かりません。
> コードが "00"になっているので Nullだと思っています。
VB.NET に Null というキーワードは無いので、この場合は vbNullChar ですかね。
ところで、"0000" の 2 バイトではなく
"00" の 1 バイトという事は、Shift_JIS や UTF-8 での保存でしょうか。
テキストファイルにする手法は、Encoding の段階で化ける可能性があるので、
String の中身を厳密に調べる場合には、不向きとされる事があります。
文字列(String)の内容をダンプする場合には、個々の文字(Char)を
AscW で数値化する方が良いかも知れません。