主要源程序:
- VERSION 1.0 CLASS
- BEGIN
- MultiUse = -1 'True
- Persistable = 0 'NotPersistable
- DataBindingBehavior = 0 'vbNone
- DataSourceBehavior = 0 'vbNone
- MTSTransactionMode = 0 'NotAnMTSObject
- END
- Attribute VB_Name = "Cls_Ini"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = True
- Attribute VB_PredeclaredId = False
- Attribute VB_Exposed = False
- 'EXAMPLE
- 'ini.Path = "LampKensaki.ini"
- 'ini.Read
- 'strT10ComPortNo = ini.GetValue("T-10_COM_NO","T-10_Com_No") 'T-10_Com_No=6
- 'intT10WaitTime = ini.GetValue("T-10_WAIT_TIME","T10WaitTime") 'T10WaitTime=3000
- 'intShoudoSokuteiTimming = ini.GetValue("SHOUDO_SOKUTEI_TIMMING","ShoudoSokuteiTimming") 'ShoudoSokuteiTimming=15
- 'Ad_Ch = ini.GetValue("AD_CH","Ad_Ch")
- 'all the functions and variables in this file are used to operate(read/write) the .ini file
- Option Explicit
- Option Compare Binary
- Private Const SP As String = "["
- Private Const EP As String = "]"
- Private Const CP As String = "="
- Private Const CB As String = ";"
- Private Type INISection
- Name As String
- Keys() As String
- KeysCnt As Long
- End Type
- Private INI_Path As String
- Private INI_Mode As Boolean
- Private INI_SectCnt As Long
- Private INI_Sect() As INISection
- Private INI_File() As String
- Private Function CheckSect(ByVal Sect As String) As Boolean
- If Left$(Sect,1) = SP And Right$(Sect,1) = EP Then
- CheckSect = 1
- End If
- End Function
- Private Function CheckKey(ByVal Key As String) As Boolean
- If Left$(Key,1) <> CB Then
- If InStr(Key,CP) Then
- CheckKey = 1
- End If
- End If
- End Function
- Private Function GetSectName(ByVal Sect As String) As String
- GetSectName = Mid$(Sect,2,Len(Sect) - 2)
- End Function
- Private Function GetKeyName(ByVal Key As String) As String
- Dim i As Long
- i = InStr(Key,CP)
- If i > 0 Then
- GetKeyName = Left$(Key,i - 1)
- End If
- End Function
- Private Function GetValueName(ByVal Key As String) As String
- Dim i As Long
- i = InStr(Key,CP)
- If i > 0 Then
- GetValueName = Right$(Key,Len(Key) - i)
- End If
- End Function
- Private Function ChangeSect(ByVal Sect As String) As String
- ChangeSect = SP & Sect & EP
- End Function
- Private Function ChangeKey(ByVal Key As String,ByVal Value As String) As String
- ChangeKey = Key & CP & Value
- End Function
- Private Sub StrectToAry()
- Dim File() As String
- Dim i As Long,t As Long,w As Long
- Dim s As Long
- Const Dumy As String = SP & "Dummy" & EP
- On Error Resume Next
- If INI_SectCnt <= 0 Then
- ReDim INI_File(0) As String
- Exit Sub
- End If
- If INI_File(0) = "" Then
- If Err.Number Then
- ReDim INI_File(0) As String
- INI_File(0) = Dumy
- ' Err.Clear
- End If
- End If
- Do
- If s >= INI_SectCnt Then Exit Do
- If CheckSect(INI_File(w)) Or w > UBound(INI_File) Then
- ReDim Preserve File(i) As String
- If s > 0 Then
- If File(i - 1) <> "" Then
- File(i) = ""
- i = i + 1
- ReDim Preserve File(i) As String
- End If
- End If
- File(i) = INI_Sect(s).Name
- For t = 0 To INI_Sect(s).KeysCnt - 1
- i = i + 1
- ReDim Preserve File(i) As String
- File(i) = INI_Sect(s).Keys(t)
- Next
- s = s + 1
- i = i + 1
- ElseIf Not CheckKey(INI_File(w)) Then
- ReDim Preserve File(i) As String
- File(i) = INI_File(w)
- i = i + 1
- End If
- w = w + 1
- Loop
- ReDim INI_File(i - 1) As String
- INI_File = File
- Err.Clear
- End Sub
- Public Property Get Path() As String
- Path = INI_Path
- End Property
- Public Property Let Path(ByVal nv As String)
- INI_Path = nv
- End Property
- Public Property Get Mode() As Boolean
- Mode = INI_Mode
- End Property
- Public Property Let Mode(ByVal nv As Boolean)
- INI_Mode = nv
- End Property
- Public Property Get SectCount() As Long
- SectCount = INI_SectCnt
- End Property
- Public Property Get KeyCount(Optional ByVal SectionNo As Long = -1,_
- Optional ByVal SectionName As String) As Long
- Dim i As Long
- If INI_SectCnt <= SectionNo Then Exit Property
- If INI_SectCnt < 1 Then Exit Property
- If SectionNo >= 0 Then
- KeyCount = INI_Sect(SectionNo).KeysCnt
- ElseIf SectionName <> "" Then
- For i = 0 To (INI_SectCnt - 1)
- If GetSectName(INI_Sect(i).Name) = SectionName Then
- KeyCount = INI_Sect(i).KeysCnt
- Exit For
- End If
- Next
- Else
- For i = 0 To (INI_SectCnt - 1)
- KeyCount = KeyCount + INI_Sect(i).KeysCnt
- Next
- End If
- End Property
- Public Property Get GetSect(ByVal SectionNo As Long) As String
- If SectionNo < 0 Then Exit Property
- If INI_SectCnt > SectionNo Then
- GetSect = GetSectName(INI_Sect(SectionNo).Name)
- End If
- End Property
- Public Property Get GetKey(ByVal SectionName As String,ByVal KeyNo As Long) As String
- Dim i As Long
- If INI_SectCnt < 1 Then Exit Property
- If KeyNo < 0 Then Exit Property
- For i = 0 To (INI_SectCnt - 1)
- With INI_Sect(i)
- If GetSectName(.Name) = SectionName Then
- If .KeysCnt > KeyNo Then
- GetKey = GetKeyName(.Keys(KeyNo))
- End If
- Exit For
- End If
- End With
- Next
- End Property
- Public Property Get GetValue(ByVal SectionName As String,ByVal KeyName As String,_
- Optional ByVal Default As String = "") As String
- Dim i As Long,t As Long
- GetValue = Default
- If INI_SectCnt < 1 Then
- Exit Property
- End If
- For i = 0 To (INI_SectCnt - 1)
- With INI_Sect(i)
- If GetSectName(.Name) = SectionName Then
- For t = 0 To (.KeysCnt - 1)
- If GetKeyName(.Keys(t)) = KeyName Then
- GetValue = GetValueName(.Keys(t))
- Exit Property
- End If
- Next
- End If
- End With
- Next
- End Property
- Public Function SetValue(ByVal SectionName As String,_
- ByVal Value As String) As Boolean
- Dim File() As String
- Dim i As Long,w As Long,z As Long
- If INI_Path = "" Then Exit Function
- If INI_SectCnt > 0 Then
- For i = 0 To (INI_SectCnt - 1)
- If GetSectName(INI_Sect(i).Name) = SectionName Then
- If INI_Sect(i).KeysCnt > 0 Then
- For t = 0 To (INI_Sect(i).KeysCnt - 1)
- If GetKeyName(INI_Sect(i).Keys(t)) = KeyName Then
- INI_Sect(i).Keys(t) = ChangeKey(KeyName,Value)
- Exit For
- End If
- Next
- If INI_Sect(i).KeysCnt < 1 Or t > (INI_Sect(i).KeysCnt - 1) Then
- With INI_Sect(i)
- ReDim Preserve .Keys(t) As String
- .Keys(t) = ChangeKey(KeyName,Value)
- .KeysCnt = .KeysCnt + 1
- End With
- End If
- SetValue = 1
- Exit For
- End If
- End If
- Next
- End If
- If INI_SectCnt < 1 Or i > (INI_SectCnt - 1) Then
- If INI_SectCnt < 1 Then i = 0
- ReDim Preserve INI_Sect(i) As INISection
- With INI_Sect(i)
- ReDim .Keys(0) As String
- .Name = ChangeSect(SectionName)
- .Keys(0) = ChangeKey(KeyName,Value)
- .KeysCnt = 1
- End With
- INI_SectCnt = INI_SectCnt + 1
- SetValue = 1
- End If
- If INI_Mode Then
- SetValue = Save
- End If
- End Function
- Public Function Delete(ByVal Section As String,Optional ByVal Key As String) As Boolean
- Dim iniSect() As INISection
- Dim iniKey() As String
- Dim i As Long,w As Long
- If INI_SectCnt <= 0 Then
- Exit Function
- End If
- If Key = "" Then
- For t = 0 To INI_SectCnt - 1
- If GetSectName(INI_Sect(t).Name) <> Section Then
- ReDim Preserve iniSect(w) As INISection
- iniSect(w) = INI_Sect(t)
- w = w + 1
- End If
- Next
- If w < t Then
- ReDim INI_Sect(w - 1) As INISection
- INI_Sect = iniSect
- INI_SectCnt = w
- Delete = 1
- End If
- Else
- For i = 0 To INI_SectCnt - 1
- If GetSectName(INI_Sect(i).Name) = Section Then
- If INI_Sect(i).KeysCnt <= 0 Then
- Exit For
- End If
- For t = 0 To INI_Sect(i).KeysCnt - 1
- If GetKeyName(INI_Sect(i).Keys(t)) <> Key Then
- ReDim Preserve iniKey(t) As String
- iniKey(w) = INI_Sect(i).Keys(t)
- w = w + 1
- End If
- Next
- If w < t Then
- ReDim INI_Sect(i).Keys(t - 1) As String
- INI_Sect(i).Keys = iniKey
- INI_Sect(i).KeysCnt = w
- Delete = 1
- End If
- End If
- Next
- End If
- If INI_Mode Then
- Delete = Save
- End If
- End Function
- Public Function Read() As Boolean
- Dim rl As String
- Dim NO As Integer
- Dim i As Long,w As Long
- On Error Resume Next
- NO = FreeFile()
- Open INI_Path For Input As #NO
- If Err.Number Or LOF(NO) = 0 Then
- Close #NO
- Exit Function
- End If
- Do While Not EOF(NO)
- ReDim Preserve INI_File(i) As String
- Line Input #NO,INI_File(i)
- i = i + 1
- Loop
- Close #NO
- INI_SectCnt = -1
- For t = LBound(INI_File) To UBound(INI_File)
- If CheckSect(INI_File(t)) Then
- w = 0
- INI_SectCnt = INI_SectCnt + 1
- ReDim Preserve INI_Sect(INI_SectCnt) As INISection
- INI_Sect(INI_SectCnt).Name = INI_File(t)
- ElseIf CheckKey(INI_File(t)) Then
- ReDim Preserve INI_Sect(INI_SectCnt).Keys(w) As String
- INI_Sect(INI_SectCnt).Keys(w) = INI_File(t)
- INI_Sect(INI_SectCnt).KeysCnt = INI_Sect(INI_SectCnt).KeysCnt + 1
- w = w + 1
- End If
- Next
- INI_SectCnt = INI_SectCnt + 1
- Read = 1
- End Function
- Public Function Save() As Boolean
- Dim NO As Integer
- Dim i As Long
- On Error Resume Next
- Call StrectToAry
- NO = FreeFile()
- Open INI_Path For Output As #NO
- If Err.Number Then
- Close #NO
- Exit Function
- End If
- For i = LBound(INI_File) To UBound(INI_File)
- If Err.Number Then
- Exit For
- End If
- Print #NO,INI_File(i)
- Next
- Close #NO
- Save = 1
- End Function
- Public Sub Release()
- INI_Path = ""
- INI_Mode = 0
- INI_SectCnt = 0
- Erase INI_File
- Erase INI_Sect
- End Sub
【更多阅读】