2008年9月18日木曜日

文房具としてのWSH

制作の現場では、ちょっとした Perl スクリプトを書いて、ローカルのテキストファイルをいじったりすることが結構少なくありません。たとえば、CSV データのレイアウトを変更したり、複数の HTML ファイルに共通して存在する文字列を別の文字列に置き換えたり。

そういうのを、文房具としての Perl なんて呼んで、プログラマーじゃなくても、それくらいのことはテキストエディタの延長みたいなつもりでいつでも使えるようにしとこうぜ、なんて言い張っていたりします。

そしてときに、そういうスクリプトをクライアントに提供したいことがあります。でも、Perl とかだと、実行環境をクライアントのローカルに作ってもらわないといけない。Active Perl をインストールしてください、なんて。PAR でしたっけ、Perl スクリプトを実行形式のファイルに変換する方法もありますけど、それなら、いっそってことで、そういうケースでは、Windows Scripting Host で動く Javascript (この文脈では JScript っていうべきなんでしょうか)で書いたりしています。

Javascript は書き慣れてますんで、これはこれで結構、制御構文や文字列の操作なんかを書くのに、いいかんじなんです。でも、ローカルのファイルの取り扱いとかでは、なんていうか面倒なオブジェクトを使わなくちゃいけなくて。オブジェクト名はキャメルケースで長ったらしかったり、4文字くらいの謎の頭文字の連なりだったりしてにわかには覚えられないし、プロパティやメソッドもいろいろごちゃっとあってですね、とにかくたまにしか書かないと、あれ、どうすんだっけなんて、本来書きたいロジックに向かうまでに、毎度毎度同じことをググったりして、正直イライラします。いや、自分がバカなだけなんですけどね。

あの、実際どんなかんじで書くのかは、明日会社いってから、ちゃんと確かなところを確認してコメントで書きます。すみません。

それはそうと、ただ、もう、カレントディレクトリにあるテキストファイルに対してなんかするって目的に特化しちゃえばですよ、そのへんをもっと直感的にっていうか、window.document からはじめて DOM エレメントをいじってる人がもうちょっと類推しやすいような書き方ができてもいいかな、なんて思います。

たとえば、window みたいに folder ってオブジェクトがあってカレントディレクトリにアクセスできるとか、folder.files が、カレントディレクトリのファイルのコレクションになってるとかね。それで、folder.files[0].text() で、対象ファイルの内容にアクセスできて、folder.files[0].text( str ) でファイルに str の値を書き込めるとか。

そのへんの手続きに思い切ってそういうシュガーをまぶしちゃえば、あとはふつうに書き慣れた Javascript を書くだけってかんじ。それこそ、innerHTML をいじるような感覚で、ローカルファイルを操作できるんじゃないかな、と。

って、そういう一種のラッパーは、簡単に書けそうですね。今度ひまをみつけてちょっとやってみましょう。

あと、ひょっとして Jemplate も WSH で動いたら、CSV の内容をあるテンプレートの HTML に変換するなんてのも簡単にできるようになるかも。どうだろ。これもやってみましょう。

CSV はね、名前をわすれちゃったけど、あるオブジェクトを使って、"select 列名 from ファイル名" なんて SQL みたいなのを書いてレコードを抽出できるんですよ。


-----------------
sent from W-ZERO3

0 件のコメント: