Visual Basic文本文件读写问题:
文本文件如下:
pt1,12.3,20.5,pt2,2.0,6.5
pt3,15.6,10,pt4,1.0,2.0
pt5,12.0,20.0,pt6,2.0,5.0
......
文件有不确定的几百行之多,有两个问题:
1.如何读入到数组,不好意思,不太熟悉Visual Basic文件操作,
2.上述文件用逗号分号空格还是制表符更方便文件读入分析
谢谢

解决方案 »

  1.   

    直接使用Open方式读入,然后使用Split分解存入数组即可
      

  2.   

    Private Sub Command1_Click()
        Dim a()
        Dim i As Integer
        x = CreateObject("scripting.FileSystemObject").OpenTextFile("c:\test.txt", 8).Line
        ReDim a(x)
        i = 0
        Open "c:\test.txt" For Input As #1
            Do While Not EOF(1)   ' 循环至文件尾。
               i = i + 1
               Line Input #1, a(i)   ' 读入一行数据并将其赋予某变量。
            Loop
        Close #1
    End Sub
      

  3.   

    Private Sub Command1_Click()
        Dim a()
        Dim i As Integer
        x = CreateObject("scripting.FileSystemObject").OpenTextFile("c:\test.txt", 8).Line
        ReDim a(x)
        i = 0
        Open "c:\test.txt" For Input As #1
            Do While Not EOF(1)   ' 循环至文件尾。
               i = i + 1
               Line Input #1, a(i)   ' 读入一行数据并将其赋予某变量。
               MsgBox a(i)
            Loop
        Close #1
    End Sub
      

  4.   

        Dim strTmp As String, intTmp As Integer, s As String, bb As Boolean
        Dim i As Long, j As Long, k As Long
        Dim a() As String, b() As String, arr() As String    Open "C:\Documents and Settings\jinj\桌面\1.txt" For Binary As #1
        s = StrConv(InputB(LOF(1), #1), vbUnicode)
        arr() = Split(s, ",")
        k = UBound(arr)
        Close #1    '可将上述一维数组直接处理为2维数组,速度要快
        Open "C:\Documents and Settings\jinj\桌面\1.txt" For Input As #2
        While EOF(2) = False
            strTmp = ""
            Line Input #2, strTmp
            a = Split(strTmp, ",")
            
            If UBound(a) = 0 And bb = False Then
                ReDim b(k, 0)
                bb = True
            ElseIf UBound(a) > intTmp Then
                ReDim Preserve b(k, UBound(a))
                intTmp = UBound(a)
                bb = True
            End If
            For j = 0 To UBound(a)
                b(i, j) = a(j)
            Next
            
            i = i + 1
            Erase a
        Wend
        Close #2    'b数组就是要得到的数组
        For i = 0 To UBound(b, 1)
            For j = 0 To UBound(b, 2)
                Debug.Print b(i, j)
            Next
        Next
      

  5.   

    Private Sub Form_Load()
        Dim s$, v$(), vLine, vSplit
        Open "c:\xx.txt" For Input As #1
        s = StrConv(InputB$(LOF(1), #1), vbUnicode)
        Close #1
        
        vLine = Split(s, vbCrLf)
        
        ReDim v(UBound(vLine), 0) As String
        Dim i%, j%, strTmp$
        For i = 0 To UBound(vLine)
            strTmp = vLine(i)
            vSplit = Split(strTmp, ",")
            ReDim Preserve v(UBound(vLine), UBound(vSplit)) As String
            For j = 0 To UBound(vSplit)
                v(i, j) = vSplit(j)
            Next
        Next
        
        MsgBox v(0, 0)
        MsgBox v(2, 5)
    End Sub在最后一行设个断电你i就能看的更清楚了
      

  6.   

    回#5楼:
                b(i, j) = a(j)
    下表越界,怎么回事?
      

  7.   

    For j = 0 To UBound(a)-1
      

  8.   

    回#6楼:
     ReDim Preserve v(UBound(vLine), UBound(vSplit)) As String在excel中visual basic编辑器中运行下标越界,怎么回事?
    谢谢
      

  9.   

    改成For j = 0 To UBound(a) - 1还是越界错误,(在excel中visual basic编辑器中运行)
    非常感激指教!!!
      

  10.   

    大家都是VB里做的,你“在excel中visual basic编辑器中运行”应该发到VBA子版里面,并早说
      

  11.   

    For j = 1 To UBound(a) 试试
      

  12.   

    检查方法
    你在
    b(i, j) = a(j)设置断点,然后右键把a和b都放到watch里面看看就知道了
      

  13.   

    那应该是因为你文件中有空行,例如最后一行。修改如下:
    Private Sub Form_Load()
        Dim s$, v$(), vLine, vSplit
        Open "c:\xx.txt" For Input As #1
        s = StrConv(InputB$(LOF(1), #1), vbUnicode)
        Close #1
        
        vLine = Split(s, vbCrLf)
        
        ReDim v(UBound(vLine), 0) As String
        Dim i%, j%, strTmp$
        For i = 0 To UBound(vLine)
            strTmp = vLine(i)
            If Trim(strTmp) <> "" Then
                vSplit = Split(strTmp, ",")
                ReDim Preserve v(UBound(vLine), UBound(vSplit)) As String
                For j = 0 To UBound(vSplit)
                    v(i, j) = vSplit(j)
                Next
            End If
        Next
        
        MsgBox v(0, 0)
        MsgBox v(2, 5)
    End Sub