VBSでNull文字を半角スペースへ置換する方法

このQ&Aのポイント
  • VBSでNull文字を半角スペースへ置換する方法についてお知恵を頂きたいです。バイナリデータを文字列として取得する際に、Scripting.FileSystemObjectを使用して1行目は取得できるのですが、2行目がNull文字で読み込めずに[]となってしまいます。
  • 解決策として、ADODB.streamを使用してNull文字を半角スペースへ置換しようとしていますが、データの比較部分で躓いています。
  • 具体的には、ary1配列にデータを格納する際に、Null文字の場合は半角スペースに置換したいのですが、どのようにすれば良いか分かりません。ご教授頂けると助かります。
回答を見る
  • ベストアンサー

VBSでNull文字を半角スペースへ置換

バイナリデータを文字列として取得したいのですがお知恵をお貸し下さい。 Stirlingというツールで開くと ADDRESS 00000000、00000010の部分に ABC 123......... と .........A11111. の行があり Scripting.FileSystemObjectで1行目は ABC 123 と取得できるのですが2行目が[]となります 検索してNull文字で読み込めないのだろうとまでは見当が付き ADODB.streamでNull文字を半角スペースへ置換しようとして躓いています Dim strm Set strm = CreateObject("ADODB.stream") strm.Open strm.Type = 1 strm.LoadFromFile(FilePath) Dim ary1() Redim ary1(31) For i = 0 To 31 If ??? <> 0x00 Then ’←この部分 ary1(i) = strm(i) else ary1(i) = 20 ’半角スペース end if データの比較で躓いています どなたかご教授願えませんでしょうか よろしくお願いいたします

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

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (740/5644)
回答No.1

読み込みの処理がなかったので勝手に追加しました。 Dim strm Set strm = CreateObject("ADODB.stream") strm.Open strm.Type = 1 strm.LoadFromFile (FilePath) Dim buf'読み込み用 buf = strm.Read(32)'読み込み Dim b'1バイト用 Dim ary1() ReDim ary1(31) Dim i For i = 0 To 31 b = AscB(MidB(buf, i + 1, 1))'1バイト取得して数値に変換 If b <> 0 Then '←変換した数値がゼロでないかどうか ary1(i) = b'←そのままの値 Else ary1(i) = 20 '半角スペース End If Next

saka_1965
質問者

お礼

dell_OK様 早速のご教授ありがとうございます。 Dim buf'読み込み用 buf = strm.Read(32)'読み込み b = AscB(MidB(buf, i + 1, 1))'1バイト取得して数値に変換 If b <> 0 Then '←変換した数値がゼロでないかどうか ary1(i) = b'←そのままの値 この情報でもう少し試行錯誤してみます。 又質問させていただく際にはよろしくお願いいたします。 本当にありがとうございました。

関連するQ&A

  • VBSで特定の文字で始まるファイルを開く

    VBSで"ADODB.Stream"オブジェクトを作成した場合、 LoadFromFileで開くファイルを指定するものだと思いますが、 このとき、特定の文字で始まるファイルを開く場合 どのように指定すれば良いのでしょうか? Set iSt = CreateObject("ADODB.Stream") ist.Charset = "UTF-16BE" ist.Open ist.LoadFromFile(?) オブジェクトがFileSystemObjectであれば *を使用してファイルを開くことができたのですが、 文字コードが"UTF-16BE"であるため ADODB.Streamを使うよう制限されています。

  • Null文字が含まれるCSV(UTF-8)の読込

    いつも参考にさせてもらっています。 よろしくお願いします。 受領したCSVファイルを1行ずつ取込み、加工して出力したいと思っています。 ファイル形式がUTF-8のため、ADODB.Streamを使って下記のように組みました。 -------------------------------------------------------------------------------- Sub testReadUTF8() Dim adoStIn As Object Dim varWork As Variant On Error GoTo ErrLBL: '読込用 Set adoStIn = CreateObject("ADODB.Stream") adoStIn.Charset = "UTF-8"          'Streamで扱う文字コードをutf-8に adoStIn.Open                 'StreamをOPEN adoStIn.LoadFromFile ("D:\test.csv")     'ファイルからStriamにデータを読み込む Do Until adoStIn.EOS             'Streamの末尾まで繰り返す varWork = adoStIn.readText(adReadLine)  'Streamから1行ずつ取込 '//処理~~~~~~ Loop ExitLBL: Exit Sub ErrLBL: 'エラー MsgBox Err.Description & vbCrLf & "(エラーコード " & Err.Number & ")", vbCritical End Sub -------------------------------------------------------------------------------- その際、 readText(adReadLine)  で取り出そうとしている行にNull文字(文字コード:00)が含まれる場合、 処理が固まってしまい、また、ErrLBLにも飛びませんでした。 読み込むCSVをテキストエディタでNull文字を除去したファイルは、正常に読込みができます。 ただし、Null文字の除去もVBAで同時に行いたく、 Replace関数でNull文字を除去すればよいかと、 ・varWork = Replace(adoStIn.readText(adReadLine), vbNullChar, "") ・varWork = Replace(adoStIn.readText(adReadLine), vbNullString, "") ・varWork = Replace(adoStIn.readText(adReadLine), Chr(0), "") ・varWork = Replace(adoStIn.readText(adReadLine), Chr$(0), "") と行ってみましたが、いずれも上記の部分で固まってしまいます。 何かしら、処理する方法はありませんでしょうか?

  • Excelでテキストを読み込んだ際の文字コード?

    中身にファイル名等が書かれているテキストを以下のVBAで読み込み、A1セルにファイル名を書き出しています。 With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .LoadFromFile Target buf = .readtext .Close End With Ary = Split(buf, Chr(10))    range("a1").value = Ary(1) 次にA1の内容がエクセルファイルかどうかを判別するために、拡張子部分を切り出し、dim extension as string で定義したextension に代入します。 ローカルウインドウで見ても、半角小文字で余計なスペースなど無い、"xlsx"になっています。 ところが if extension = "xlsx" then … とif文でチェックしてみても、不一致になってしまいます。 ちなみにworkbook.openでA1の内容を指定しても、フルパスで間違えていないにも係わらず、ファイルを開くこともできません。 文字コードが原因かと推測はするのですが、これ以上、自分の力では対応できず・・・ この場合、if extension = "xlsx" then …を成立させるためにはどうすれば良いのでしょうか?

  • Excelのセル内で半角スペースを空けると

    たとえば「abc -i」と記述するときに-iの後に半角スペースを空けるとiが大文字になってしまいます。どのようにすれば大文字にならないようにできますでしょうか?環境はXPのOffice2003です。 ご存知の方よろしくお願いします。

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 半角スペースを含む文字列を変数にセット可能?

    以下のような、画像を読み込む関数を定義します。 function changePhoto(OBJname, image) { document.images[OBJname].src=image; } これを onClick=changePhoto('Photo316','abc xyz.jpg') のように、引数に半角スペースを含む文字列で呼び出すと、エラーになってしまいます。 abc_xyz.jpgであれば問題ありません。 半角スペースは渡せないのでしょうか? よろしくお願いします。

  • null文字を一括変換

    null文字が入ったファイル(テキストなど)のnull文字を 半角スペースに一括変換するフリーソフトは、ないでしょうか? 変換対象ファイルがかなり大きいので、ファイルを開かずに 変換できるようなものがいいです。 よろしくお願いします。

  • VBAでEUC-JPのHTMLソースを取得しShift-JISにしたい

    こんにちは。 現在 1.Msxmlで任意のHTMLソースを取得 (ただこれがEUCで、エクセル上だと文字化けする) 2.それをShift-JISにエンコードして、のちのちExcel表にする) というコードをExcelVBAで描いています。 ソースの取得はできるのですが、 EUCのサイトのため漢字が文字化けします。 エンコードしようと思ってもできません。 ADODB.Streamというものを使おうとしています。 宜しくお願い致します。 Dim xmlHttp Set xmlHttp = CreateObject("Msxml2.XMLHTTP") xmlHttp.Open "GET", url, False xmlHttp.send Set in_strm = CreateObject("ADODB.Stream") Set out_strm = CreateObject("ADODB.Stream") in_strm.Charset = "EUC-JP" in_strm.Type = adTypeText out_strm.Charset = "Shift_JIS" out_strm.Type = adTypeText in_strm.Open out_strm.Open m_byte1 = xmlHttp.responseText in_strm.WriteText m_byte1 in_strm.Position = 0 in_strm.CopyTo out_strm out_strm.Position = 0 m_string2 = out_strm.ReadText(adReadAll) MsgBox m_string2 'ここで正しいものが表示される予定・・・ in_strm.Close out_strm.Close Set in_strm = Nothing Set out_strm = Nothing

  • バイナリ読み込み書き込みについて

    Set objReadADO = WScript.CreateObject("ADODB.Stream") If Err.Number = 0 Then objReadADO.Open objReadADO.Type = 2 objReadADO.LoadFromFile "C:\old.xls" End If Set objWriteADO = WScript.CreateObject("ADODB.Stream") If Err.Number = 0 Then objWriteADO.Open objWriteADO.Type = 2 End If strReadDate = objReadADO.Read(-1) If InStr(1, strReadDate, "abc", 0) > 0 Then ← 1 strReadDate = Replace(strReadDate, "abc", "xyz") ← 2 End If objWriteADO.Write strReadDate objWriteADO.SaveToFile "C:\new.xls" objReadADO.Close objWriteADO.Close Excelをバイナリで読み込み、特定の文字があった場合に置き換えを行い別の名前でExcelを出力したいと思っています。出力自体は出来たのですが、変換がされません… ADODB.Streamは初心者なためどうしてよいかわかりません。 どのようにすればできるのでしょうか? よろしくお願いします。

  • Excelで2バイト文字の前に半角スペース一括挿入

    いつもありがとうございます。 A列に下記のような 「半角英数」+「漢字(orひらがな・全角記号)」のデータが数百個あります。 abc漢字あああ 2zzあああ qrs5s~(ああ) 以下省略 半角英数と全角文字の間に半角スペースを一括挿入したいのですが、 どのようにすれば可能でしょうか。 (例えば "abc漢字あああ" を "abc 漢字あああ" に変換 "2zzあああ"   を "2zz あああ" に変換 "qrs5s~(ああ)" を "qrs5s ~(ああ)" ※"~"の前に半角スペース に変換) お知恵拝借できれば幸いですm(_ _)m

専門家に質問してみよう