我要对一个文本文件进行读取,格式如下:Node Father
   No=1
   name="Altete"
   age=50
   sex=M
   height=175
   weight=140
   address="阿丹特斯街"
EndNode Mother
   No=2
   name="Alice"
   age=40
   sex=L
   Tel=5878562
EndNode Sun
   No=3
   name="Sam"
   age=25
   interest="Design"
End
.
.
.
更多的Node
注意上面的node类型有20多种,结构都不一样,Node 与 End 之间是一个属性列表,现在我想从这个文本文件中读取这些数据,要求把Node与End之间作为一个块的形式将其添加到集合中去,并以No属性为索引,应该怎么样做?

解决方案 »

  1.   

    晕倒哦:
    1、你的名字怎么跟偶这么象哦?
    2、如果不是强求这种格式的话建议你用INI来保存配置:
    Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As Long
    Public R As Long
    '写入INI
    Function WriteToINI(ByVal MainCap As String, KeyName As String, ByVal Entry As String, ByVal FilePath As String) As Boolean
        WriteToINI = True
        R = WritePrivateProfileString(MainCap, KeyName, Entry, FilePath)
        If R <> 1 Then WriteToINI = False
    End Function
    '读取INI
    Function GetFromINI(AppName As String, KeyName As String, Filename As String) As String
        Dim RetStr As String
        RetStr = String(2000, Chr(0))
        GetFromINI = left(RetStr, GetPrivateProfileString(AppName, ByVal KeyName, "", RetStr, Len(RetStr), Filename))
    End Function
      

  2.   

    可以用循环读取啊,每次读取一行,然后根据'='号前面的名称赋值给不同的变量,读到'end'这一行的时候再往集合里加,并清空所有的临时变量的值
      

  3.   

    楼上的朋友,呵呵,俺也姓张,不过,广东那边读音为chang, 
    ini里的每个区间[]是没有重复,我这个文本文件里的数据,有相同结构的也不有同结构的,我问题主要不是想如何保存为这种格式,而是想将这个格式的数据读出来,放进一个数据结构或集合里
      

  4.   

    例子:
    Public Function ToXML() As String
        Dim strXML As String
        strXML = "<Father>"
            strXML = strXML & "<name>" & Father.Name & "</name>"
            ……
        strXML = strXML & "</Father>"
        
        ToXML = strXML
    End FunctionPublic Function FromXML(ByVal strXML As String) As Boolean
        Dim objXMLDoc As New MSXML2.DOMDocument30
        objXMLDoc.async = False
        objXMLDoc.resolveExternals = False    objXMLDoc.loadXML (strXML)
        If objXMLDoc.parseError.errorCode <> 0 Then
            FromXML = False
            Set objXMLDoc = Nothing
            Exit Function
        End If    Dim objNode As MSXML2.IXMLDOMNode    Set objNode = objXMLDoc.selectSingleNode("./Father")
        If objNode Is Nothing Then
            FromXML = False
            Set objXMLDoc = Nothing
            Exit Function
        End If
        
        Father.Name = objXMLDoc.selectSingleNode("./Father/name").Text
        ……    Set objXMLDoc = Nothing
    End Function
      

  5.   

    那么说,用XML的话,我还得先把文本文件的格式写成一个XML的文档,然后再从其中读出???
      

  6.   

    提示,文本行后有vbCrLf,而且你的数据极有规律性
    用行读加循环完全可以!dim FirstFlag as boolean,EndFlag as boolean
    dim txtLine$,UsedInfo$open "xxxx.txt" for input as #1do until eof(1)
       line Input#,txtline
       if not(instr(txtline,"Node")>0 or instr(txtline,"End")>0 or trim(txtline)="") then
          UsedInfo=mid(txtline,instr(txtline,"=")+1)
       end if
    loop