- ベストアンサー
VBSによるファイル処理方法と文字コードの問題解決の方法
- VBS超初心者の方が、VBSを使ってテキストファイルの処理をする方法と、文字コードの問題を解決する方法を教えてください。
- VBSでテキストファイルをドラッグ&ドロップして、連続した改行を特定の文字列に置換するスクリプトを作成しました。しかし、ドイツ語のファイルを処理すると文字化けしてしまいます。UTF-8のまま処理する方法を教えてください。
- VBSのスクリプト記述についても改善点があるか教えてください。初心者なのでお手柔らかにお願いします。
- みんなの回答 (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
その他の回答 (1)
- nda23
- ベストアンサー率54% (777/1415)
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
補足
まだ始めたばかりなので、見当はずれなことをしてたら御免なさい。 以下のようにするということでしょうか。 (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
お礼
ご教授ありがとうございました。確かにこれで機能しました! これから、上記のスクリプトをリバースエンジニアリング(という程のことでもないのでしょうが、経験者にとっては)して、自分のものにしていきたいと思います。 Perlと浮気しながらの勉強ですので、亀の歩みになるかも知れませんが、またバカな質問をした際には、ご助言頂けると幸いです。