Cls_Ini.cls:VB写的操作ini配置文件的类

前端之家收集整理的这篇文章主要介绍了Cls_Ini.cls:VB写的操作ini配置文件的类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

点击此处下载Cls_Ini.cls

主要源程序:

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

【更多阅读】

  1. [原]WMICodeCreator:C#产生WMI代码的工具
  2. [原]Cls_Ini.cls:VB写的操作ini配置文件的类
  3. [原]GetIcons:C#提取应用程序的图标资源
  4. [原]Baidu:C#利用百度来搜索网页、图片、视频等等
  5. [原]ManageStartUpApps:C#操作注册表来读取和修改开机启动项
  6. [原]Baidu:C#利用百度来搜索网页、图片、视频等等
  7. [译]用C#检测你的打印机是否连接
  8. [原]WMICodeCreator:C#产生WMI代码的工具
  9. [原]使用Excel的VBA来读取和修改bmp位图像素数据
  10. [原]DownloadWebImages:下载某页面上的所有图片

猜你在找的VB相关文章