プロが教える店舗&オフィスのセキュリティ対策術

VBS超初心者です。

VBSにテキストファイルをドラッグ&ドロップして、改行が3回以上連続した箇所を「改行+ダミー文字+改行」に置換するスクリプトを作成してみました。

WEB上のサンプルスクリプトなどを参考にしながら、なんとか動くようにすることはできたのですが、ドイツ語のファイルを処理すると、何故か文字コードがS-JISになって文字化けしてしまいます。

どうしたらUTF-8のまましょりできるのでしょうか。

また、スクリプトの記述もかなり拙いものになっていると思います。
問題点、完全方法などご教授いただけると今後の勉強に役立つと思うので、よろしくお願いします。

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

A 回答 (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
    • good
    • 0
この回答へのお礼

ご教授ありがとうございました。確かにこれで機能しました!

これから、上記のスクリプトをリバースエンジニアリング(という程のことでもないのでしょうが、経験者にとっては)して、自分のものにしていきたいと思います。

Perlと浮気しながらの勉強ですので、亀の歩みになるかも知れませんが、またバカな質問をした際には、ご助言頂けると幸いです。

お礼日時:2009/11/19 11:55

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

補足日時:2009/11/18 18:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!