我现在正打算写一个INI文件,这个文件包括以下内容:(怎么写INI文件作为一张表)计算机ID号,安装的地点,网络IP地址,安装的时间[Item1]
ID=8883
Address=Beijing
NetIP=128.127.128.22
Time=04-27-2004[Item2]
ID=8283
Address=Beijing
NetIP=128.127.128.23
Time=04-27-2004ItemXX作为一条记录,
ID=8883
Address=Beijing
NetIP=128.127.128.22
Time=04-27-2004[Item2]
ID=8283
Address=Beijing
NetIP=128.127.128.23
Time=04-27-2004ItemXX作为一条记录,
On Error GoTo tErr
Dim f As Integer
f = FreeFile
Open PathTxt For Binary As #f
Put #f, , inText
Close #f
WriteTxt = True
Exit Function
tErr:
WriteTxt = False
End Function
ID=8883
Address=Beijing
NetIP=128.127.128.22
Time=04-27-2004[Item2]
ID=8283
Address=Beijing
NetIP=128.127.128.23
Time=04-27-20041、将上述记录文本全部读入到一个String里面,假设叫做tString。关于如何将文本文件一次读入到一个String里面,如果你不了解可以另行开贴询问。假设我们有一个函数叫做TextGetByFile(),假设该函数可以将一个文本文件读入到一个字符传里。(该函数我手头就有)Dim tString As String
tString=TextGetByFile("Test.ini")2、现在假设tString包含上述全部字符(包括换行)。我们从tString里获得每个Item。tItemStrs()是每段记录的文本。Dim tItemStrs() As String
tItemStrs()=Split(tString,"[Item") '注意这一句的用法。现在,我们得到了每个记录的文本。注意:tItemStrs(0)必定是无效的记录。
如果是tItemStrs(1),则内容会是:
1]
ID=8883
Address=Beijing
NetIP=128.127.128.22
Time=04-27-2004接着,要从tItemStrs()的元素里获得ID、Address、NetIP、Time等信息。首先拆分tItemStrs每一行。假设tItemStr是tItemStrs()的一个元素。我们现在在另外一个函数里。
tItemStr_Lines()=Split(tItemStr,vbCrlf)现在,tItemStr_Lines()数组的内容是:
0:1]
1:ID=8883
2:Address=Beijing
3:NetIP=128.127.128.22
4:Time=04-27-2004
5:接着,对tItemStr_Lines()的每一个元素做下列操作,我们假设这是又一个函数。
tAttribs()=Split(tItemStr_Lines(i),"=")
tAttribs(0)是属性的名称,tAttribs(1)是属性的值。依次以IF解析就可以了。如果你看不明白,我会尝试把这个程序写出来。
Dim tInfos() As tpRecordInstallInfo
tInfos = RecordInstallInfos_GetByText(Text1.Text)
Text2.Text = RecordInstallInfos_PutToText(tInfos())
End SubRecordInstallInfos_Cound函数:用来计算tpRecordInstallInfo数组的数量,如果是0则说明该数组为空,不可操作(如操作则出错)。RecordInstallInfos_PutToText函数:将tpRecordInstallInfo数组输出到文本。RecordInstallInfos_GetByText函数:从文本获得tpRecordInstallInfo数组。以下是:INILoad.bas的内容(是一个公共模块)。Type tpRecordInstallInfo
riID As Long
riAddress As String
riIP(0 To 3) As Byte
riTime As Date
End TypeFunction RecordInstallInfos_Cound(ByRef pInfos() As tpRecordInstallInfo) As Long
Dim tOutLong As Long
Err.Clear
On Error Resume Next
tOutLong = UBound(pInfos) + 1
RecordInstallInfos_Cound = tOutLong
End FunctionFunction RecordInstallInfos_PutToText(ByRef pInfos() As tpRecordInstallInfo) As String
Dim tOutString As String
Dim tInfos_Length As Long
Dim tIndex As Long
tInfos_Length = UBound(pInfos)
For tIndex = 0 To tInfos_Length
tOutString = tOutString & "[Item" & CStr(tIndex) & "]" & vbCrLf & RecordInstallInfo_PutToText(pInfos(tIndex)) & vbCrLf
Next
RecordInstallInfos_PutToText = tOutString
End FunctionFunction RecordInstallInfos_GetByText(ByVal pText As String) As tpRecordInstallInfo()
Dim tOutInfos() As tpRecordInstallInfo
Dim tStrings() As String
Dim tStrings_Length As Long
Dim tIndex As Long
tStrings() = Split(pText, "[Item")
tStrings_Length = UBound(tStrings)
If tStrings_Length > 1 Then
ReDim tOutInfos(tStrings_Length - 1)
For tIndex = 1 To tStrings_Length
tOutInfos(tIndex - 1) = RecordInstallInfo_GetByText(tStrings(tIndex))
Next
End If
RecordInstallInfos_GetByText = tOutInfos()
End FunctionFunction RecordInstallInfo_GetByText(ByVal pText As String) As tpRecordInstallInfo
Dim tOutInfo As tpRecordInstallInfo
Dim tStrings() As String
Dim tStrings_Length As Long
Dim tItemStrings() As String
Dim tItem_Name As String
Dim tItem_Value As String
Dim tIPStrings() As String
Dim tIP_Index As Long
Dim tIndex As Long
tStrings() = Split(pText, vbCrLf)
tStrings_Length = UBound(tStrings)
For tIndex = 0 To tStrings_Length
tItemStrings() = Split(tStrings(tIndex), "=")
If UBound(tItemStrings) = 1 Then
tItem_Name = UCase(tItemStrings(0))
tItem_Value = tItemStrings(1)
End If
With tOutInfo
If tItem_Name = "ID" Then
.riID = CLng(tItem_Value)
ElseIf tItem_Name = "ADDRESS" Then
.riAddress = tItem_Value
ElseIf tItem_Name = "NETIP" Then
tIPStrings() = Split(tItem_Value, ".")
If UBound(tIPStrings) = 3 Then
For tIP_Index = 0 To 3
If IsNumeric(tIPStrings(tIP_Index)) Then
.riIP(tIP_Index) = CByte(CLng(tIPStrings(tIP_Index)) Mod 256)
End If
Next
End If
ElseIf tItem_Name = "TIME" Then
.riTime = CDate(tItem_Value)
Else
End If
End With
Next
RecordInstallInfo_GetByText = tOutInfo
End FunctionFunction RecordInstallInfo_PutToText(ByRef pInfo As tpRecordInstallInfo) As String
Dim tOutString As String
Dim tStrID As String
Dim tStrAddress As String
Dim tStrIP As String
Dim tStrTime As String
With pInfo
tStrID = "ID=" & Format(.riID, "0000")
tStrAddress = "Address=" & .riAddress
tStrIP = "NetIP=" & .riIP(0) & "." & .riIP(1) & "." & .riIP(2) & "." & .riIP(3)
tStrTime = "Time=" & Format(.riTime, "dd-mm-yyyy")
End With
tOutString = tStrID & vbCrLf & tStrAddress & vbCrLf & tStrIP & vbCrLf & tStrTime
RecordInstallInfo_PutToText = tOutString
End Function