VBScriptには設定ファイルを便利に利用することができるような機能はありません。
しかしiniファイルのような形式で設定したいですよね。
プロパティファイルはJavaなどでも利用される形式で、「プロパティ名=値」というシンプルなものになっています。
実際には配列を扱ったり、他のプロパティファイルを読み込むなどの仕様があります。
また、iniファイルだとコメントの書式が異なり(プロパティファイルは#、iniファイルはセミコロン)ますし、セクションという仕様もあります。
ここでは簡易的に「プロパティ名=値」という簡易的なものを利用してみたいと思います。
設定ファイルを用意する
簡易的な設定ファイルとして、以下のようなものを準備します。
title=日本の歴史
author=なるーらぼ
file=books¥japanese_history.epub
コメントはiniファイル形式のセミコロンとプロパティファイル形式の#記号の両方使えるとしましょう。
つまり、上記のファイルは次のような形式もアリです。
title=日本の歴史
; これはコメントです
author=なるーらぼ# これもコメントです
file=books\japanese_history.epub
ではVBScriptで読み込んでみましょう。
スクリプトを用意する
サンプルとしては次のものをご紹介します。
option explicit
const propfile = "app.properties"
'' メインルーチンですsub main()
'' 変数宣言です
'' 左から、ファイルシステムオブジェクト、テキストストリームオブジェクト
'' スクリプトがある場所、読み込んだファイルの1行、設定を入れる辞書オブジェクト
'' 前後の空白を除去したファイルの1行、イコール記号で分割した結果、辞書のキー
dim fso, ts, basepath, line, props, propdata, prop, p
'' ファイルシステムオブジェクト、辞書オブジェクトを呼び出します
set fso = CreateObject("Scripting.FileSystemObject")
set props = CreateObject("Scripting.Dictionary")
'' スクリプトの場所を参照します
basepath = fso.GetFile(WScript.ScriptFullName).ParentFolder.Path
'' スクリプトのある同じフォルダ内の「app.properties」を開きます
set ts = fso.OpenTextFile(fso.BuildPath(basepath, propfile), 1)
'' ファイルの最後まで繰り返し
do until ts.AtEndOfStream
line = ts.ReadLine
'' 読み込んだ行が空行のときは相手にしません
if trim(line) <> "" then
propdata = trim(line)
'' 読み込んだ行がコメントのときも相手にしません
if instr(propdata, ";") <> 1 and instr(propdata, "#") <> 1 then
prop = split(propdata, "=")
'' イコール記号で分割すると2要素の配列になるのでそれ以外は相手にしません
if ubound(prop) = 1 then
'' 辞書に登録します
props.add prop(0), prop(1)
end if
end if
end if
loop
'' ファイルを閉じます
ts.close
'' ここは表示するところです
for each p in props
WScript.echo props(p)
next
'' 使い終わったオブジェクトは逃がしてあげましょう
set ts = nothing
set fso = nothing
end sub
'' メインルーチンを呼び出します
call main
注意事項
上記のサンプルは以下の点で改良しなければなりません。
- エラーが発生したときの処理がありません
- イコール記号のまわりに空白があると、同じプロパティでも別物扱いされます
- 同じプロパティ名があるとエラーになります
- 別のフォルダに設定ファイルがあると読み込むことができません
- 設定ファイル名が異なると読み込むことができません
その他、読みにくいので設定を読み込む部分を別のルーチンへ分割したほうがよいでしょう。
0コメント