IniA generic class to access ini files
File Name : class_ini.vbs Requirement : WSH 5.1 Author : Jean-Luc Antoine Submitted : 26/08/2001 Category : Class To use a class, follow this syntax : Dim MyObjClass set MyObjClass=new MyClass MyObjClass.Property="Any value" MsgBox MyObjClass.AnotherProperty MyObjClass.MyMethod MyParam1,MyParam2 Set MyObjClass=Nothing Very simple, no need to rename any variable nor register any ActiveX. Option Explicit Class Ini Private fso,f Public Filename 'Path to the ini File Public Section '[section] Public Key 'Key=Value Public Default 'Return it when an error occurs Private Sub Class_Initialize ' Setup Initialize event. Default="" Set fso=CreateObject("Scripting.FileSystemObject") End Sub Private Sub Class_Terminate ' Setup Terminate event. Set fso=Nothing End Sub Property Get Content() 'All the file in a string If fso.FileExists(FileName) Then Set f=fso.OpenTextFile(FileName,1) Content=f.ReadAll f.close Set f=Nothing Else Content="" End If End Property Property Let Content(sContent) 'Create a brand new ini file Set f=fso.CreateTextFile(FileName,True) f.Write sContent f.close Set f=Nothing End Property Property Get ContentArray() 'All the file in an array of lines ContentArray=Split(Content,vbCrLf,-1,1) End Property Private Sub FindSection(ByRef StartLine, ByRef EndLine) Dim x,A,s StartLine=-1 EndLine=-2 A=ContentArray For x=0 To UBound(A) s=UCase(Trim(A(x))) If s="[" & UCase(section) & "]" Then StartLine=x Else If (Left(s,1)="[") And (Right(s,1)="]") Then If StartLine>=0 Then EndLine=x-1 If EndLine>0 Then 'A Space before the next section ? If Trim(A(EndLine))="" Then EndLine=EndLine-1 End If Exit Sub End If End If End If Next If (StartLine>=0) And (EndLine<0) Then EndLine=UBound(A) End Sub Property Get Value() 'Retrieve the value for the current key in the current section Dim x,i,j,A,s FindSection i,j A=ContentArray Value=Default 'Search only in the good section For x=i+1 To j s=Trim(A(x)) If UCase(Left(s,Len(Key)))=UCase(Key) Then Select Case Mid(s,Len(Key)+1,1) Case "=" Value=Trim(Mid(s,Len(Key)+2)) Exit Property Case " ",chr(9) x=Instr(Len(Key),s,"=") Value=Trim(Mid(s,x+1)) Exit Property End Select End If Next End Property Property Let Value(sValue) ' Write the value for a key in a section Dim i,j,A,x,s,f FindSection i,j If i<0 Then 'Session doesn't exist Content=Content & vbCrLf & "[" & section & "]" & vbCrLf & Key & "=" & sValue Else A=ContentArray f=-1 'Search for the key, either the key exists or not For x=i+1 To j s=Trim(A(x)) If UCase(Left(s,Len(Key)))=UCase(Key) Then Select Case Mid(s,Len(Key)+1,1) Case " ",chr(9),"=" f=x 'Key found A(x)=Key & "=" & sValue End Select End If Next If f=-1 Then 'Not found, add it at the end of the section Redim Preserve A(UBound(A)+1) For x=UBound(A) To j+2 Step -1 A(x)=A(x-1) Next A(j+1)=Key & "=" & sValue End If 'Define the content s="" For x=0 To UBound(A) s=s & A(x) & vbCrLf Next 'Suppress the last CRLF If Right(s,2)=vbCrLf Then s=Left(s,Len(s)-2) Content=s 'Write it End If End Property End Class |
|||||
![]()
|
|