Ameba Ownd

アプリで簡単、無料ホームページ作成

なるーらぼ

[tips]VBScriptで簡易プロパティファイル形式を利用する

2016.02.03 02:27

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

注意事項

上記のサンプルは以下の点で改良しなければなりません。

その他、読みにくいので設定を読み込む部分を別のルーチンへ分割したほうがよいでしょう。