2006 年 8 月 13 日 23 時 56 分

ライブラリ定数の利用


このアーカイブは同期化されません。 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 オブジェクトが
正しく文字符号化方法を認識しているので、
文字化けが発生せずに正しく表示できているのである。

明日はこのテンプレートに日記を流し込んで保存してみよう。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.