VBScriptには、JavaでいうところのPropertiesクラスように、プロパティファイルを扱うオブジェクトやメソッドがありません。このため、キーとや値を定義したプロパティファイルを扱いたい場合は、自作する必要があります。
以下のページを参考に、VBScriptでJavaのPropertiesクラスっぽいクラスを作って、プロパティファイルを読んでみたいと思います。
Propertieファイルの仕様
Javaのプロパティファイルの仕様を参考に、今回は以下のような仕様にしました。
- キー名=値という形式で記述する(=の前後に半角スペースがあっても構わない)
- キー名の大文字小文字は区別する
- #あるいは!で始まる行は、コメント行として扱う
- キー名が存在しない場合は、空文字を返す(JavaではNullが返ります)
- キーが重複している場合はエラーとする
Propertiesクラス
Option Explicit Class Properties Private name Private ENCODING Private dic Private errNo Private errDesc Private Sub Class_Initialize On Error Resume Next name = "Properties" ENCODING = "UTF-8" Set dic = CreateObject("Scripting.Dictionary") End Sub Public Sub Load(fileName) On Error Resume Next Dim medthodName : medthodName = name & ".Load" dim arr, tmp, firstLetter With CreateObject("ADODB.Stream") .Charset = ENCODING .Open .LoadFromFile(fileName) Do While Not .EOS tmp = .ReadText(-2) If tmp <> "" Then firstLetter = Left(tmp, 1) ' コメント行は、何もしない If firstLetter <> "#" AND _ firstLetter <> "!" Then arr = Split(tmp, "=") Call dic.Add(Trim(arr(0)), Trim(arr(1))) If Err.Number <> 0 Then errNo = Err.Number errDesc = Err.Description On Error GoTo 0 Call Err.Raise(errNo, medthodName, errDesc) End If End If End If Loop .Close End With If Err.Number <> 0 Then errNo = Err.Number errDesc = Err.Description On Error GoTo 0 Call Err.Raise(errNo, medthodName, errDesc) End If End Sub Public Function getProperty(key) getProperty = dic.Item(key) End Function End Class
使い方
' Propertiesクラスを生成する Dim prop : Set prop = New Properties If Err.Number <> 0 Then ' エラー処理 End If ' プロパティファイルをロードする Call prop.Load("hoge.properties") If Err.Number <> 0 Then ' エラー処理 End If ' aというキーの値を取得する WScript.Echo prop.getProperty("a")