小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


VBScriptでJavaのPropertiesクラスっぽいクラスを作って、プロパティファイルを扱ってみる

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")