我想循环读取INI文件,编程如下,但是就是读不出来。一个一个的可以读。请各位大侠帮帮忙,看看程序有什么问题,帮我指出来,并提出修改意见。谢谢!
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))
End FunctionPrivate Sub cmdRead_Click()
    Dim key(9) As String
    Dim m As Integer
    Dim no As Integer
    Dim i As Integer
   
    no = 1
     For no = 1 To Val(Text1.Text)
        key(0) = "_IPAdr"
        key(1) = "_Port"
        key(2) = "_ModbusFC"
        key(3) = "_AdrPLC_EW"
        key(4) = "_AdrI/O_EW"
        key(5) = "_Count_EW"
        key(6) = "_AdrPLC_AW"
        key(7) = "_AdrI/O_AW"
        key(8) = "_Count_AW"
        key(9) = "_Timeout"
        
        For i = 0 To 9
           key(i) = CStr(no) + key(i)
           m = i + 1
           MSFGrid1.TextMatrix(no, m) = GetFromINI("ILBETH24 ", key(i), App.Path + "\PLC43.ini)
        Next i
     Next noEnd Sub如果说要读取的PLC43.INI文件中的内容为
[ILBETH24]
1_IPAdr=   .   .   .
1_Port=502
1_ModbusFC=0x03
1_AdrPLC_EW= 1
1_AdrI/O_EW= 2
1_Count_EW= 3
1_AdrPLC_AW=-
1_AdrI/O_AW=-
1_Count_AW=-
1_Timeout=2000
2_IPAdr=   .   .   .
2_Port=502
2_ModbusFC=0x04
2_AdrPLC_EW= 11
2_AdrI/O_EW= 21
2_Count_EW= 31
2_AdrPLC_AW=-
2_AdrI/O_AW=-
2_Count_AW=-
2_Timeout=2000
3_IPAdr=   .   .   .
3_Port=502
3_ModbusFC=0x06
3_AdrPLC_EW=-
3_AdrI/O_EW=-
3_Count_EW=-
3_AdrPLC_AW= 4
3_AdrI/O_AW= 5
3_Count_AW= 6
3_Timeout=2000
4_IPAdr=   .   .   .
4_Port=502
4_ModbusFC=0x10
4_AdrPLC_EW=-
4_AdrI/O_EW=-
4_Count_EW=-
4_AdrPLC_AW= 41
4_AdrI/O_AW= 51
4_Count_AW= 61
4_Timeout=2000
5_IPAdr=   .   .   .
5_Port=502
5_ModbusFC=0x17
5_AdrPLC_EW= 11
5_AdrI/O_EW= 21
5_Count_EW= 31
5_AdrPLC_AW= 41
5_AdrI/O_AW= 51
5_Count_AW= 61
5_Timeout=2000

解决方案 »

  1.   

    给你看一下我的一个软件的一个模块Option ExplicitPrivate Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongPrivate 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 Long
        
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, lpString As Any, ByVal lpFileName As String) As Long
    Public strIniFilePath As String
    Public gblnIsStart As BooleanPublic Function GetiniValue(ByVal lpKeyName As String, ByVal strName As String, ByVal strIniFile As String) As String
        Dim strTmp As String * 32767
        Call GetPrivateProfileString(lpKeyName, strName, "", strTmp, Len(strTmp), strIniFile)
        GetiniValue = Left$(strTmp, InStr(strTmp, vbNullChar) - 1)
    End Function
        
    Public Function GetInfoSection(strArray() As String, ByVal strSection As String, strIniFile As String) As Boolean
        Dim strReturn As String * 32767
        Dim strTmp As String
        Dim lngReturn As Integer, i As Integer, strTmpArray() As String, sum As Integer
        lngReturn = GetPrivateProfileSection(strSection, strReturn, Len(strReturn), strIniFile)
        strTmp = Left(strReturn, lngReturn)
        strTmpArray = Split(strTmp, Chr(0))
        For i = 0 To UBound(strTmpArray)
            If strTmpArray(i) <> "" And strTmpArray(i) <> Chr(0) Then
                strTmp = Trim(Mid(strTmpArray(i), InStr(strTmpArray(i), "=") + 1, Len(strTmpArray(i)) - InStr(strTmpArray(i), "=")))
                If strTmp <> "" Then
                    ReDim Preserve strArray(0 To sum)
                    strArray(sum) = strTmpArray(i)
                    sum = sum + 1
                End If
            End If
        Next
        If sum > 0 Then GetInfoSection = True
    End Function
    Public Function WriteIniStr(ByVal strSection As String, ByVal strKey As String, ByVal strData As String, ByVal strIniFile As String) As Boolean
        On Error GoTo WriteIniStrErr
        WriteIniStr = True
        If strData = Chr(0) Then
            WritePrivateProfileString strSection, strKey, ByVal 0, strIniFile
        Else
            WritePrivateProfileString strSection, strKey, ByVal strData, strIniFile
        End If
        Exit Function
    WriteIniStrErr:
        Err.Clear
        WriteIniStr = False
    End FunctionPublic Function GetMaxIndex(ByVal strSection As String, strIniFile As String) As String
        Dim strReturn As String * 32767
        Dim strTmp As String
        Dim lngReturn As Integer, i As Integer, strTmpArray() As String, sum As Integer
        lngReturn = GetPrivateProfileSection(strSection, strReturn, Len(strReturn), strIniFile)
        strTmp = Left(strReturn, lngReturn)
        strTmpArray = Split(strTmp, Chr(0))
        For i = 0 To UBound(strTmpArray)
            If strTmpArray(i) <> "" And strTmpArray(i) <> Chr(0) Then
                strTmp = Left(strTmpArray(i), InStr(strTmpArray(i), "=") - 1)
                If Val(strTmp) > sum Then sum = Val(strTmp)
            End If
        Next
        GetMaxIndex = sum + 1
    End FunctionPublic Function IsIniDataExist(ByVal strSection As String, strIniFile As String, ByVal strData As String) As Boolean
        Dim strReturn As String * 32767
        Dim strTmp As String
        Dim lngReturn As Integer, i As Integer, strTmpArray() As String, sum As Integer
        lngReturn = GetPrivateProfileSection(strSection, strReturn, Len(strReturn), strIniFile)
        strTmp = Left(strReturn, lngReturn)
        strTmpArray = Split(strTmp, Chr(0))
        For i = 0 To UBound(strTmpArray)
            If strTmpArray(i) <> "" And strTmpArray(i) <> Chr(0) Then
                strTmp = Trim(Mid(strTmpArray(i), InStr(strTmpArray(i), "=") + 1, Len(strTmpArray(i)) - InStr(strTmpArray(i), "=")))
                If strTmp <> "" Then
                    If LCase(strTmp) = LCase(strData) Then
                        IsIniDataExist = True
                        Exit For
                    End If
                End If
            End If
        Next
    End FunctionPublic Function ViewHideFileInfo() As Boolean
        Dim strArray() As String, i As Integer, strNo As String, strName As String, strFile As String
        frmMain.lvHideFiles.ListItems.Clear
        On Error GoTo ErrLine
        If GetInfoSection(strArray, "HideFileOrFolderInfo", strIniFilePath) Then
            For i = 0 To UBound(strArray)
                strNo = Left(strArray(i), InStr(strArray(i), "=") - 1)
                strName = ParseFileName(Mid(strArray(i), InStr(strArray(i), "=") + 1, Len(strArray(i)) - InStr(strArray(i), "=")))
                strFile = Mid(strArray(i), InStr(strArray(i), "=") + 1, Len(strArray(i)) - InStr(strArray(i), "="))
                If Not gblnIsStart Then
                    If AddHideFile(strFile) Then
                        AddDataToListView strNo, strName, strFile, "文件/目录隐藏"
                    End If
                Else
                    AddDataToListView strNo, strName, strFile, "文件/目录隐藏"
                End If
            Next
        End If
        Erase strArray
        If GetInfoSection(strArray, "HideFolderFileInfo", strIniFilePath) Then
            For i = 0 To UBound(strArray)
                strNo = Left(strArray(i), InStr(strArray(i), "=") - 1)
                strName = ParseFileName(Mid(strArray(i), InStr(strArray(i), "=") + 1, Len(strArray(i)) - InStr(strArray(i), "=")))
                strFile = Mid(strArray(i), InStr(strArray(i), "=") + 1, Len(strArray(i)) - InStr(strArray(i), "="))
                If Not gblnIsStart Then
                    If AddHideFile(strFile) Then
                        AddDataToListView strNo, strName, strFile, "目录下隐藏"
                    End If
                Else
                    AddDataToListView strNo, strName, strFile, "目录下隐藏"
                End If
            Next
        End If
        ViewHideFileInfo = True
        Exit Function
    ErrLine:
        ViewHideFileInfo = False
    End FunctionPublic Sub AddDataToListView(ByVal strNo As String, ByVal strFileName As String, ByVal strFilePath As String, ByVal strHideType As String)
        Dim lvItem As ListItem
        If strNo = "" Then
            If strHideType = "文件/目录隐藏" Then
                strNo = GetMaxIndex("HideFileOrFolderInfo", strIniFilePath)
            Else
                strNo = GetMaxIndex("HideFolderFileInfo", strIniFilePath)
            End If
        End If
        Set lvItem = frmMain.lvHideFiles.ListItems.Add(, , strNo)
        lvItem.SubItems(1) = strFileName
        lvItem.SubItems(2) = strFilePath
        lvItem.SubItems(3) = strHideType
    End Sub'此函数从字符串中分离出路径
    Public Function ParsePath(ByVal sPathIn As String) As String
        Dim i As Integer
        For i = Len(sPathIn) To 1 Step -1
            If InStr(":\", Mid$(sPathIn, i, 1)) Then Exit For
        Next
        ParsePath = Left$(sPathIn, i)
    End Function'此函数从字符串中分离出文件名
    Public Function ParseFileName(ByVal sFileIn As String) As String
        Dim i As Integer
        For i = Len(sFileIn) To 1 Step -1
            If InStr("\", Mid$(sFileIn, i, 1)) Then Exit For
        Next
        ParseFileName = Mid$(sFileIn, i + 1, Len(sFileIn) - i)
    End Function'此函数从字符串中分离出文件扩展名
    Public Function GetFileExt(ByVal sFileName As String) As String
        Dim p As Integer
        For p = Len(sFileName) To 1 Step -1
            If InStr(".", Mid$(sFileName, p, 1)) Then Exit For
        Next
        GetFileExt = Right$(sFileName, Len(sFileName) - p)
    End Function