対象ディレクトリ内のファイルを行単位で読込み、置換を行います。
今回はテキストエリアの中身をCSVに出力したファイルの末尾が改行になっているものを
強制的に除去しているだけで、実際は置換していません。
対象の大量ファイルは「C:/replaceBefore」にあるとし、
置換後の大量ファイルを作成するために「C:/replaceAfter」を作成しておきます。
var fso = new ActiveXObject("Scripting.FileSystemObject");
var files = fso.GetFolder("D:/replaceBefore").Files;
var e = new Enumerator(files);
// ディレクトリ内の全てのファイル分繰り返す。
for ( ; !e.atEnd(); e.moveNext()) {
var file = e.item();
var fileFullPathBefore = "D:/replaceBefore/" + file.Name;
var fileFullPathAfter = "D:/replaceAfter/" + file.Name;
WScript.Echo(fileFullPathBefore + "を処理します。");
// 入力ファイルの設定
// Typeの設定値
// 1:バイナリを表す。
// 2:既定値。charsetで指定した文字セットで文字列を表す。
var sr = new ActiveXObject("ADODB.Stream");
sr.Type = 2;
sr.charset = "utf-8";
sr.Open();
sr.LoadFromFile(fileFullPathBefore);
// 出力ファイルの設定
var sw = new ActiveXObject("ADODB.Stream");
sw.Type = 2;
sw.charset = "utf-8";
sw.Open();
// 入力ファイルの読込み
// 入力ファイルがEOSになるまで繰り返す。
while (!sr.EOS) {
// ReadTextの第1引数
// -1:既定値。EOSマーカーに達するまですべてのバイトをストリームから読み取る。
// -2:改行までの行をストリームから読み取る。改行はLineSeparatorの設定値依存。
var temp = sr.ReadText(-2);
// 置換文字列検索用
// RegExpの第2引数に'g'を指定すると全置換になる。
// var reg = new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]{7}");
// var reg = new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]{7}", 'g');
// temp = temp.replace(reg, "");
// 出力ファイルの書込み
// WriteTextの第2引数
// ActiveXObjectのTypeが文字列(2)の場合に利用する。
// 0:既定値。文字列を書き込む。
// 1:文字列+改行を書き込む
// 末尾の1文字を取得する。
var lastWord = temp.slice(-1);
// 末尾がダブルクォートである場合
if (lastWord == "\"") {
// WScript.Echo("ダブルクォート");
// 文字列+改行を書き込む。
sw.WriteText(temp, 1);
// 末尾がダブルクォート以外である場合
} else {
// WScript.Echo("違う");
// 文字列を書き込む。
sw.WriteText(temp, 0);
}
}
// 書き込みの文字コードがUTF-8の場合、BOMが付与されるため、除去する。
// 書き込んだオブジェクトのポジションをゼロに戻し、
// バイナリモードを指定した上で、ポジションを3byte分ずらし、再書き込みする。
// この処理順序は変更不可。
if (sw.charset == "utf-8") {
sw.Position = 0;
sw.Type = 1;
sw.Position = 3;
var textBinary = sw.Read();
sw.Close();
sw.Type = 1;
sw.Open();
sw.Write(textBinary);
}
sr.Close();
sr = null;
// 出力ファイルの保存
// SaveToFileの第2引数
// 1:既定値。ファイルがない場合、新規作成する。ファイルがある場合、上書きしない。
// 2:ファイルがない場合、新規作成する。ファイルがある場合、上書きする。
sw.SaveToFile(fileFullPathAfter, 2);
sw.Close();
sw = null;
}
fso = null;