今のお仕事の、作業環境にいろいろと制約がありましてな・・・。
簡単な作業をしたくても、パズル的に制約をかいくぐる必要がありまして。
今回やりたいのは、こんなこと。
- 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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。