我现在正打算写一个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作为一条记录,

解决方案 »

  1.   

    http://www.sijiqing.com/vbgood/experience/index.asp?action=read&id=3243
      

  2.   

    'vbCrLfPublic Function WriteTxt(ByVal PathTxt As String, ByVal inText As String) As Boolean
        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
      

  3.   

    哈哈!这个问题其实好解决:原数据:[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-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解析就可以了。如果你看不明白,我会尝试把这个程序写出来。
      

  4.   

    测试代码:Private Sub Command1_Click()
      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