如何循环读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