このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
昨日のコードには、2 やら -1 やらの生の数値が出てきた。
これらの数は、ADODB タイプライブラリで定義されている、
列挙型の定数なのだが、JavaScript では、
それらの列挙型のシンボルを理解できないので、
昨日は整数値をそのまま書いて利用した。
var adTypeText = 2;
のように先頭に書いて使ってもいいのだが、
WSH には、列挙型シンボルを取り込む仕組みがある。
wsf に以下のように書くと、
上記のような定数が利用できるようになる。
<?xml version="1.0" encoding="shift-jis"?>
<job>
<reference object="ADODB.Stream" />
<runtime>~省略~</runtime>
<script>~省略~</script>
</job>
reference 要素は、タイプライブラリを取り込む命令だ。
guid 属性で、タイプライブラリの GUID を指定する方法と、
object 属性で COM オブジェクトの ProgID を指定するという
2 つの方法がある。後者は、そのオブジェクトを含む
ライブラリを間接的に示したことになる。
一般的には、ProgID を使って new ActiveXObject するので、
object 属性で ProgID を指定して取り込む方が自然である。
こうしておくと、<script> 属性で取り込んだ
プログラムコードで、定数シンボルを使うことができる。
では、テンプレートファイルを読み込んでみよう。
まず、以下のようなアホテンプレートを用意する。
========== default.html ==========
<html>
<head>
<title>$date の日記: $title</title>
</head>
<body>
<h1>$title</h1>
<p>$date</p>
<p>$body</p>
</body>
</html>
========== end of default.html ==========
これを、UTF-8 等で保存しておく。
そして、このファイルを読み込んでみる。
========== Main.js ==========
function main() {
// オブジェクトを作成
var input = new ActiveXObject("ADODB.Stream");
// ストリームを開く
input.Open();
// テキスト入出力モード
input.Type = adTypeText;
// 入出力の文字符号化を UTF-8 に
input.Charset = "UTF-8";
// テンプレートファイルをストリームに流し込む
input.LoadFromFile("default.html");
// ポインタを最初の位置に戻す
input.Position = 0;
// ストリームの全テキストを取り出す
var template = input.ReadText();
// ストリームを閉じる
input.Close();
// テンプレートを表示
WScript.Echo(template);
}
main();
========== end of Main.js ==========
こうすると、画面に default.html の内容が表示される。
一見当たり前のようだが、Stream オブジェクトが
正しく文字符号化方法を認識しているので、
文字化けが発生せずに正しく表示できているのである。
明日はこのテンプレートに日記を流し込んで保存してみよう。