• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBS/ドラッグ&ドロップ/UTF-8)

VBSによるファイル処理方法と文字コードの問題解決の方法

このQ&Aのポイント
  • VBS超初心者の方が、VBSを使ってテキストファイルの処理をする方法と、文字コードの問題を解決する方法を教えてください。
  • VBSでテキストファイルをドラッグ&ドロップして、連続した改行を特定の文字列に置換するスクリプトを作成しました。しかし、ドイツ語のファイルを処理すると文字化けしてしまいます。UTF-8のまま処理する方法を教えてください。
  • VBSのスクリプト記述についても改善点があるか教えてください。初心者なのでお手柔らかにお願いします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

う~む、「超初心者」だったんですね。 応用例を記載したので、そのまま書くとダメなんですよ。 以下は丸々のプログラムです。但し、インデントは漢字空白なので、 半角スペースに変換してください。 Option Explicit Dim strArgument, myStr, repStr, objRE, newStr, Stm Set objRE = New RegExp objRE.Pattern = "(" & vbCrLf & "){3,}" repStr = vbCrLf & "[dummy]" & vbCrLf objRE.Global = True For Each strArgument in Wscript.Arguments   Set Stm = CreateObject("ADODB.Stream")   Stm.Open   Stm.Type = 2   Stm.Charset = "utf-8"   Stm.LoadFromFile strArgument   Stm.Position = 0   myStr = Stm.ReadText   newStr = objRE.Replace(myStr,repStr)   Stm.Position = 0   Stm.WriteText newStr   Stm.SetEOS   Stm.Position = 0   Stm.SaveToFile strArgument, 2   Stm.Close   Set Stm = Nothing Next

Kazu_creator
質問者

お礼

ご教授ありがとうございました。確かにこれで機能しました! これから、上記のスクリプトをリバースエンジニアリング(という程のことでもないのでしょうが、経験者にとっては)して、自分のものにしていきたいと思います。 Perlと浮気しながらの勉強ですので、亀の歩みになるかも知れませんが、またバカな質問をした際には、ご助言頂けると幸いです。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

ADODBのStreamで処理したらどうなりますか? Dim Stm Set Stm = CreateObject("ADODB.Stream") Stm.Open Stm.Type = 2 Stm.Charset = "utf-8" Stm.LoadFromFile strArgument Stm.Position = 0 myStr = Stm.ReadText == 今までの処理 == Stm.Position = 0 Stm.WriteText newStr Stm.SetEOS Stm.Position = 0 Stm.SaveToFile strArgument Stm.Close Set Stm = Nothing

Kazu_creator
質問者

補足

まだ始めたばかりなので、見当はずれなことをしてたら御免なさい。 以下のようにするということでしょうか。 (ADODBのStream自体が初耳でした。検索して調べてみましたが、わかったようなわからないような…) 結果:この場合6行目で、「引数が間違った型、許容範囲外、または競合しています。」「コード:800A0BB9」とエラーになってしまいます。 Dim Stm Set Stm = CreateObject("ADODB.Stream") Stm.Open Stm.Type = 2 Stm.Charset = "utf-8" Stm.LoadFromFile strArgument Stm.Position = 0 myStr = Stm.ReadText Set FS = CreateObject("Scripting.FileSystemObject") For Each strArgument in Wscript.Arguments Set ts=Fs.OpenTextFile(strArgument,1,True,TristateTrue) myStr=ts.ReadAll Set objRE = New RegExp objRE.Pattern = "(" & vbCrLf & "){3,}" repStr = vbCrLf & "[dummy]" & vbCrLf objRE.IgnoreCase = True objRE.Global = True objRE.Multiline = True newStr = objRE.Replace(myStr,repStr) ts.Close Set ts = FS.OpenTextFile(strArgument,2,True,TristateTrue) ts.Write newStr ts.Close Next NextStm.Position = 0 Stm.WriteText newStr Stm.SetEOS Stm.Position = 0 Stm.SaveToFile strArgument Stm.Close Set Stm = Nothing