当前位置:编程学习 > VB >>

如何循环读INI文件

我想循环读取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 Function

Private 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 no

End 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
--------------------编程问答-------------------- 你这里一个个读跟循环读没有什么区别啊,跟踪程序看看 --------------------编程问答-------------------- 给你看一下我的一个软件的一个模块

Option Explicit

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

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 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 Boolean

Public 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 Function

Public 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 Function

Public 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 Function

Public 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 Function

Public 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
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,