INI内容为未知 
[section1] 
keyword1=valuel 
keyword2=value2 
…… 
[section2] 
keyword1=value1 
keyword2=value2 
…… 
我想读取 SECTION1的值 和section1里的KEYWORD值我已经有可以读取未知SECTION1的代码可是如何读取未知的section1里的KEYWORD值

解决方案 »

  1.   

    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
                                    ByVal lpApplicationName As String, _
                                    ByVal lpKeyName As Any, _
                                    ByVal lpDefault As String, _
                                    ByVal lpReturnedString As String, _
                                    ByVal nSize As Long, _
                                    ByVal lpFileName As String) As LongFunction GetProString(段 As String, 标题 As String, 默认值 As String, 文件名 As String) As String
        Const ProStringLen = 8096
        Dim Res As Long, S As String, i As Long
        S = Space(ProStringLen)
        Res = GetPrivateProfileString(段, 标题, 默认值, S, ProStringLen, 文件名)
        S = Trim(Left(S, Res))
        If S <> "" Then
            i = Len(S)
            Do While Mid(S, i, 1) = vbNullChar
                i = i - 1
            Loop
            S = Left(S, i)
        End If
        GetProString = Trim(S)
    End FunctionPrivate Sub Form_Load()
        Dim Apps() As String, i As Integer
        Apps = Split(GetProString(vbNullString, vbNullString, "", "c:\xx.ini"), vbNullChar)
        Debug.Print "项目总数=" & UBound(Apps) - LBound(Apps) + 1
        For i = LBound(Apps) To UBound(Apps)
            Debug.Print "第" & i; "项 = " & Apps(i)
        Next i
        End
    End Sub以上是读取INI文件中未知[SECTION1]的代码
      

  2.   


    Option Explicit
    Private Declare Function GetPrivateProfileString Lib "KERNEL32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal pFileName As String) As Long
    Private Declare Function WritePrivateProfileString Lib "KERNEL32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
    Private Declare Function GetPrivateProfileSection Lib "KERNEL32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long'*************************************
       '目的:写入数据至Ini文件
       
       '输入: FileName 文件名
       '      AppName  项目名
       '      In_Key   键名
       '      In_Data  键名上的数值
       
       '返回:  写入成功 True
       '       写入失败 False
       
    '*************************************Public Function WriteIniStr(ByVal FileName As String, ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean
    On Error GoTo WriteIniStrErr
    WriteIniStr = True
    If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then
       GoTo WriteIniStrErr
    Else
       WritePrivateProfileString AppName, In_Key, In_Data, FileName
    End If
    Exit Function
    WriteIniStrErr:
       Err.Clear
       WriteIniStr = False
    End Function
    '*************************************
       '目的:从Ini文件中读取数据
       
       '输入: FileName 文件名
       '      AppName  项目名
       '      In_Key   键名
       
       '返回: 取得给定键名上的数据
       
    '*************************************Public Function GetIniStr(ByVal FileName As String, ByVal AppName As String, ByVal In_Key As String) As String
    On Error GoTo GetIniStrErr
    If VBA.Trim(In_Key) = "" Then
       GoTo GetIniStrErr
    End If
    Dim GetStr As String
      GetStr = VBA.String(128, 0)
      GetPrivateProfileString AppName, In_Key, "", GetStr, 256, FileName
      GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
    If GetStr = "" Then
       GoTo GetIniStrErr
    Else
       GetIniStr = GetStr
       GetStr = ""
    End If
    Exit Function
    GetIniStrErr:
       Err.Clear
       GetIniStr = ""
       GetStr = ""
    End Function'*************************************
       '目的:编历Ini文件中的某个主键
       
       '输入: FileName 文件名
       '      AppName  项目名   
       '返回:某个项目下的所有键及值
       
    '*************************************
    Public Function GetInfoSection(AppName As String, FileName As String) As String()
              Dim strReturn     As String * 32767
              Dim strTmp     As String
              Dim nStart     As Integer
              Dim nEnd       As Integer
              Dim i       As Integer
              Dim sArray()     As String
                
              Call GetPrivateProfileSection(AppName, strReturn, Len(strReturn), FileName)
                
              strTmp = strReturn
              i = 1
              Do While strTmp <> ""
                      nStart = nEnd + 1
                      nEnd = InStr(nStart, strReturn, vbNullChar)
                      strTmp = Mid$(strReturn, nStart, nEnd - nStart)
                      If Len(strTmp) > 0 Then
                              ReDim Preserve sArray(1 To i)
                              sArray(i) = strTmp
                              i = i + 1
                      End If
              Loop
              GetInfoSection = sArray
      End Function
      

  3.   

    Option ExplicitPrivate Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As Long
    Private XMH As Variant
    Function GetFromINI(AppName As String, KeyName As String, FileName As String) As String
       Dim RetStr As String
       RetStr = String(255, Chr(0))
       GetFromINI = Left(RetStr, GetPrivateProfileString(AppName, ByVal KeyName, "", RetStr, Len(RetStr), FileName))
       Dim i As Long
       i = InStr(1, GetFromINI, Chr$(0))
       GetFromINI = Mid(GetFromINI, 1, i - 1)
    End FunctionPrivate Sub Command1_Click()    Dim iniPath As String
        iniPath$ = App.Path + "\GPDXXini32.ini"
        XMH = Split(GetFromINI("MTABLE", "XM1", iniPath), " ")
        'MsgBox UBound(XMH)
        MsgBox LenB(XMH(5))End Sub