2014/11/08

[wsh]JScriptでUTF-8ファイルを読んで置換して保存

今のお仕事の、作業環境にいろいろと制約がありましてな・・・。
簡単な作業をしたくても、パズル的に制約をかいくぐる必要がありまして。

今回やりたいのは、こんなこと。

  • Windows環境
  • ファイルを読み込んで、置換して出力したい
  • 文字コードは、UTF-8 / LF
  • 出力したファイルを別コマンドに喰わせたいので、スクリプト1発で済ませたい
  • Windowsの素の環境で動くこと+ダウンロードをまったく使わないこと

sedとかperlとかあれば済む話なんだけど、ネットを使えないので入っていない。
いや、頼めばやってくれそうではあるけれども、頼むのがめんどくさいし、少しくらい障壁があった方が燃えるじゃないか。
そもそも、この課題自体が自分で立てたようなものだし。

ネットで検索して、こんなコードができた。
ここに書いてもダウンロードできないけど、見ながら入力するのはよいだろう。

var inFile = "in.txt";
var outFile = "out.txt";
var inStream = new ActiveXObject("ADODB.Stream");
inStream.Type = 2;      //text
inStream.charset = "utf-8";
inStream.Open();
inStream.LoadFromFile(inFile);
var inText = inStream.ReadText(-1);       //-1:全部 -2:1行ごと
inStream.Close();
inText = inText.replace(/100/g, "-1");
inText = inText.replace(/ABC/g, "abc");
var outStream = new ActiveXObject("ADODB.Stream");
outStream.Type = 2;
outStream.charset = "utf-8";
outStream.Open();
outStream.WriteText(inText, 1);    //0:改行無し 1:改行有り
outStream.SaveToFile(outFile, 2);   //1:なければ新規作成 2:新規作成かつ存在すれば上書き
outStream.Close();

最後のSaveToFile()には、ドキュメントにだまされた
詳細はこちらをご確認くだされ。

あと、replace()の第1引数も想定と違っていた。
最初は"/100/g"のような文字列で書いてたんだけど、ダブルクオーテーションとかで囲むとダメなんだな。
理屈はわからんが、/で囲むのが正規表現値、みたいな意味なのかな。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。