inigetのアイキャッチ

[VBS]VBscriptからINIの内容を取得する

VBscriptでINIの内容を取得するものを探している人は参考にしてください。


下記は、INIファイルからVBscriptでセクション「test1」のパラメータ「data1」と、セクション「test2」のパラメータ「data3」の内容を取得し、表示するプログラムです。

 

■INIファイルの内容(iniget.ini)

[test1]
data1=1111
data2=2222
[test2]
data3=3333
data4=4444

 

■実行結果

c:\cscript iniget.vbs

test1のdata2:2222
test2のdata3:3333



■VBscriptのソース(iniget.vbs)
' iniファイル名
Const conIniFileName = "c:\vbs\iniget\iniget.ini"
' ファイル入出力の定数
Const conForReading = 1, conForWriting = 2, conForAppending = 8

Set objFSO = CreateObject("Scripting.FileSystemObject")

' ファイルのOPEN
Set objIniFile = objFSO.OpenTextFile(conIniFileName, conForReading, False)
If Err.Number <> 0 Then
' エラーメッセージを出力
wscript.echo "INIファイル名:" & conIniFileName
wscript.quit(1)
End If

' 格納先Dictionaryオブジェクトの作成
Set objSectionDic = CreateObject("Scripting.Dictionary")

' ファイルのREAD
strReadLine = objIniFile.ReadLine
Do While objIniFile.AtEndofStream = False
' ステートメント開始行を検索
If (strReadLine <> " ") And (StrComp("[]", (Left(strReadLine, 1) & Right(strReadLine, 1))) = 0) Then
' セクション名を取得
strSection = Mid(strReadLine, 2, (Len(strReadLine) - 2))
' キー用Dictionaryオブジェクト作成
Set objKeyDic = CreateObject("Scripting.Dictionary")
' ファイルの最終行になるまでLoop
Do While objIniFile.AtEndofStream = False
strReadLine = objIniFile.ReadLine
If (strReadLine <> "") And (StrComp(";", Left(strReadLine, 1)) <> 0) Then
' 次のステートメント開始行が出現したら、Loop終了
If StrComp("[]", (Left(strReadLine, 1) & Right(strReadLine, 1))) = 0 Then
Exit Do
End If
' 1セクション内の定義をDictionaryオブジェクトに格納する
arrReadLine = Split(strReadLine, "=", 2, vbTextCompare)
objKeyDic.Add UCase(arrReadLine(0)), arrReadLine(1)
End If
Loop
' オブジェクトに格納する
objSectionDic.Add UCase(strSection), objKeyDic
Else
strReadLine = objIniFile.ReadLine
End If
Loop

' ファイルのCLOSE
objIniFile.Close

'配列からデータを取得し、表示する
wscript.echo "test1のdata2:" & funcIniFileGetString(objSectionDic, "test1", "data2")
wscript.echo "test2のdata3:" & funcIniFileGetString(objSectionDic, "test2", "data3")

'****************************************************************
'iniの内容を配列から取得
'第1引数:配列名
'第2引数:セクション
'第3引数:パラメータ
'****************************************************************
Function funcIniFileGetString(objDictionary, strSection, strKey)

Dim objTempdic

strSection = UCase(strSection)
strKey = UCase(strKey)

If objDictionary.Exists(strSection) Then
Set objTempdic = objDictionary.Item(strSection)
If objTempdic.Exists(strKey) Then
funcIniFileGetString = objDictionary(strSection)(strKey)
Exit Function
End If
End If

funcIniFileGetString = ""

End Function

コメントを残す

名称 *
メールアドレス *
ウェブサイト

CAPTCHA



CAPTCHA Image
Reload Image