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