2012年11月19日月曜日

VBAで設定ファイルの読み込み

なんとなく設定ファイルを読み込む関数を作ろうかと思って書いてみた。
Dictionaryで返します。


Option Explicit

'設定ファイルを読み込んでDictionaryで返す
Public Function GetConfig(strFileName)
  Dim RegExp    'VBScript_RegExp_55.RegExp
  Dim Match     'VBScript_RegExp_55.Match
  Dim Matches   'VBScript_RegExp_55.MatchCollection
  Dim dict      'Scripting.Dictionary
  Dim fso       'Scripting.FileSystemObject
  Dim strData   'ファイルのデータ
  Dim i
  
  'RegExp Setting
  Set RegExp = CreateObject("VBScript.RegExp")
  RegExp.IgnoreCase = False '大文字小文字を区別する
  RegExp.Global = True
  RegExp.MultiLine = True   '複数行を対称にする
  RegExp.Pattern = "^(\S+)\s*=\s*(\S+)*\s*$"
  
  'Dictionary(keyは大文字小文字を区別する)
  Set dict = CreateObject("Scripting.Dictionary")
  
  'FilesyStemObject
  Set fso = CreateObject("Scripting.FileSystemObject")
  
  'ファイルチェック
  If Not fso.FileExists(strFileName) Then
    Set GetConfig = dict
    Set dict = Nothing
    Set fso = Nothing
    Exit Function
  End If
  
  'ファイル読み込み
  With fso.OpenTextFile(strFileName)
    strData = .ReadAll
  End With
  Set fso = Nothing
  
  '取り出し
  Set Matches = RegExp.Execute(strData)
  For Each Match In Matches
    dict(Match.SubMatches(0)) = Match.SubMatches(1)
  Next
  
  Set GetConfig = dict
  
  Set RegExp = Nothing
  Set Matches = Nothing
  Set Match = Nothing
  Set dict = Nothing
End Function

一応、vbscriptも意識してみたつもり。