有一个文本数据,形式如图所示
   -0.017    -0.014    -0.015    -0.017    -0.013    -0.025    -0.016     0.008 
   -0.019    -0.014    -0.018    -0.041    -0.025    -0.025    -0.020    -0.019 
   -0.008    -0.026    -0.025    -0.020    -0.022    -0.020    -0.020    -0.035 
   -0.025    -0.017    -0.022    -0.020    -0.020    -0.019    -0.022    -0.028 
   -0.018    -0.020    -0.016    -0.017    -0.028    -0.030    -0.027    -0.015 
   -0.015    -0.021    -0.002    -0.016    -0.014    -0.020    -0.026    -0.012 
   -0.013    -0.011    -0.016    -0.016    -0.018    -0.022    -0.020    -0.020 
   -0.021    -0.014    -0.018    -0.032    -0.019    -0.018    -0.037    -0.030 
   -0.063    -0.039    -0.156    -0.057    -0.069    -0.063    -0.036    -0.079 
 7685.813    -0.041     0.060    -0.045    -0.111    -0.098    -0.075    -0.083 
   -0.126    -0.097    -0.039    -0.089    -0.114    -0.077    -0.077    -0.080 
   -0.094    -0.119    -0.053     0.008    -0.131    -0.083    -0.068    -0.037 现在只需要读取前五行(因为第一行是空行,也就是前四行数据),即前32个数据,作为Y值,每个Y值对应的X值已经固定了。然后打印曲线。因为要对每一个数据进行计算,所以想读取前32个数据到textbox,每一个数据对应一个个textbox。或者把前32个数据存到一个数组中也行虽然有想法,但是没能实现,初学,大家多给讲解一下!谢谢

解决方案 »

  1.   

    Public Function Read32(ByVal sFileName As String) As Single()
        '从指定文件中读取每段的前32个数值(4行)
        '
        '返回值:
        '       所有读取到的数值
        '
        Dim lFn As Long, sBuff As String, LineBuff() As String, sTmp() As String, OutBuff() As Single
        Dim I As Long, J As Long, K As Long, L As Long, IsNewBlock As Boolean
        
        lFn = FreeFile
        Open sFileName For Binary As #lFn
            sBuff = Space(LOF(lFn))
            Get #lFn, , sBuff
        Close #1
        
        For I = 1 To 4
            sBuff = Replace(sBuff, "  ", " ")
        Next
        sBuff = Replace(sBuff, Chr(0), "")
        
        Debug.Print sBuff
        IsNewBlock = False
        L = -1
        ReDim OutBuff(0)
        
        LineBuff() = Split(sBuff, vbCrLf)
        For I = 0 To UBound(LineBuff)
            LineBuff(I) = Trim(LineBuff(I))
            If Len(LineBuff(I)) > 4 Then                '是否有效行
                If J > -1 Then
                    J = J + 1                               '当前段读取行数计数
                    If J = 5 Then                           '当前行是第5行了
                        J = -1                              '初始化行数,等待下一个空行
                    Else
                        sTmp() = Split(LineBuff(I), " ")    '按空格拆分当前行的数据
                        For K = 0 To UBound(sTmp)
                            L = L + 1
                            ReDim Preserve OutBuff(L)
                            OutBuff(L) = CSng(sTmp(K))
                        Next
                    End If
                End If
            Else
                J = 0
            End If
        Next
        
        K = -1
        For I = 0 To (UBound(OutBuff) + 1) / 8 - 1
            For J = 0 To 7
                K = K + 1
                Debug.Print OutBuff(K),
            Next
            Debug.Print
        Next
        Read32 = OutBuff
    End Function