Private Sub Command1_Click() Dim filename,instring,a(36),b() As String 
Dim i,j As Integer 
Dim arry(0 To 36, 0 To 72), arry1(0 To 36, 0 To 72) As Single filename = "\\Micaps-server\micapsdata\ecmwf\pressure\999\" + Format(Date, "yymm") + LTrim(Str(Format(Date, "dd") - 1)) + "20" + ".000" Open filename For Input As #1 
Line Input #1, instring 
Line Input #1, instring 
Line Input #1, instring 
instring = ""      /读前面3行,不要的 '将37个数据块读入字符串数组a(i) For i = 0 To 36 
    For j = 0 To 8 
        Line Input #1, instring 
        a(i) = a(i) + instring 
    Next j 
Next i '切割数组,把数值附到二维数组arry(),73列,第一列为空,每行前面有3个空格,所以分割的时候有73个元素。 For i = 0 To 36 
    b() = Split(a(i), Space(3)) 
    For j = 0 To UBound(b) 
        arry(i, j) = b(j) 
    Next j 
Next i 
Close #1 
End Sub 
前面编译的时候没有出错,debug.print arry(0,1)  (1,1)得到了正确数据,因为还要同样处理其他文件,我把前面的代码重新粘贴,改了下打开的文件名,数组用arry1( ,)接收数据,结果提示“b() = Split(a(i), Space(3))” 类型不匹配,b()的下标又原来的72变为144,难道重复使用split()下标要累加?? 
改c(),也不行。后面把重新粘贴的这段去掉,还是提示原来的“b() = Split(a(i), Space(3))” 类型不匹配。 
split()返回的应该是一个1维数组,用字符串数组b(),接收为什么会出错,搞不懂,请哪位大侠指教,将下面的数据读书数组 。
============================================== 
源数据 
diamond 4 9年4月16日20点ECMWF_海平面气压17日20点预报 
9 4 16 20 24 999    2.500    2.500    0.000  177.500    0.000  90.000 72 37 
  4.0    988.0  1036.0 0 0   1012.4  1011.8  1012.1  1010.4  1010.1  1009.9  1008.9  1008.2  1008.1  1008.5 
  1008.4  1008.9  1009.0  1011.2  1011.1  1013.1  1006.8  1008.2  1008.2  1007.6 
  1007.9  1007.3  1007.3  1007.3  1007.2  1007.2  1007.0  1007.3  1007.2  1007.0 
  1006.7  1006.4  1006.5  1006.7  1006.8  1006.8  1006.8  1007.0  1007.2  1007.6 
  1009.3  1007.0  1007.8  1008.1  1008.3  1010.1  1010.8  1009.6  1010.0  1010.3 
  1009.8  1009.9  1010.2  1009.5  1009.4  1009.9  1010.2  1010.0  1010.2  1009.7 
  1009.5  1010.0  1009.6  1009.3  1009.4  1008.4  1009.0  1009.0  1009.1  1009.2 
  1009.1  1009.0   1012.1  1012.2  1011.2  1010.3  1010.1  1010.3  1008.4  1008.3  1008.5  1008.7 
  1008.3  1007.7  1008.7  1009.2  1009.1  1006.1  1009.1  1008.5  1007.2  1007.3 
  1007.5  1007.4  1007.5  1007.4  1007.8  1007.4  1007.1  1007.1  1006.9  1006.6 
  1006.4  1006.2  1006.1  1006.4  1006.4  1006.5  1006.6  1006.6  1006.9  1007.4 
  1006.9  1007.2  1007.7  1008.0  1008.6  1009.4  1014.7  1010.1  1009.6  1009.9 
  1010.3  1009.9  1010.2  1009.6  1009.6  1009.3  1010.1  1010.2  1009.9  1010.0 
  1010.0  1009.8  1009.3  1008.9  1008.9  1008.5  1008.8  1008.9  1008.9  1008.8 
  1008.8  1008.7 

解决方案 »

  1.   

    既然知道split,则应该一次性读入全部数据,先根据vbcrlf分解成行数据,再循环每一行根据空格分解成单元数据。
      

  2.   

    Private Sub Command1_Click()
    Dim strFile As String
    Dim i As Long
    Dim arr() As String
    Dim strL As StringOpen "c:\1.txt" For Binary As #1
     strFile = Space(LOF(1))
     Get #1, , strFile
    Debug.Print strFile   '全部读入
    Close #1
    arr = Split(strFile, vbCrLf) For i = 3 To UBound(arr)  '从第三行开始  一行一行读出
       MsgBox arr(i)
     Next iEnd Sub
      

  3.   

    就是的,最好能读到一个2维数组中,方便计算和输出。
    另外就是b() = Split(a(i), Space(3))  类型不匹配问题,不知道是什么原因。 
      

  4.   

    b() = Split(a(i), Space(3))  
    ===>
    b = Split(a(i), Space(3))  
      

  5.   

    我已经将每个数据块 读入了a(i)数组中了,a(0)为第一个数据块,现在组要问题是把a(0)中的数据切割,附到一个数组中(一行有72个数据),现在的问题是一用到b() = Split(a(i), Space(3)),就提示类型不匹配。
    另外按您上面的代码运行,没有提示语法错误,但及时窗口只输出了3个空格, 也没有消息提示框弹出。strFile里可能没东西。
      

  6.   

    我认为:b() = Split(a(i), Space(3)) 不会有错。
    倒是给 arry1() 的元素赋值时才会出错。
    “……b()的下标又原来的72变为144”的原因是:
    从第一个文件中读数据时,a() 的每一个元素的值为 Empty ,所以:
    b() = Split(a(i), Space(3))
    的结果是 73 个元素,下标 0 ~72。
    当从第二个文件读数据时,相信楼主没有加上把 a() 的每个元素赋值为空串的语句。
    所以,读取数据后, a() 的每个元素赋值为:第一个文件的72个数据 + 第二个文件的72个数据
    b() = Split(a(i), Space(3))
    的结果是 143 个元素,下标 0 ~142。你可以在读完每个文件后,把 a() 中的元素任选一个打印出来比较一下就知道了。********************************
    读第二个文件的代码应该是:
    For i = 0 To 36
        a(i) = ""    '加上这一句
        For j = 0 To 8 
            Line Input #1, instring 
            a(i) = a(i) + instring 
        Next
    Next另:楼主要养成良好的习惯:VB 中 Next 后面不要带变量
      

  7.   

    -_-!
    忘记了,VB 中可以自动类型转换,给 arry1() 的元素赋值时应该不会出错~~~~
      

  8.   

    按 ayalicer 方法 把b() 改成 b 还是不行,搞不懂。问题不是这么切割,而是一用到他就提示类型不匹配,又不知道为什么,郁闷~~~~
      

  9.   

    首先谢谢,举杯邀明月的关心。
    For i = 0 To 36 
        For j = 0 To 8 
            Line Input #1, instring 
            a(i) = a(i) + instring 
        Next j 
    Next i    可能是我上面表述得不清楚。a(i)是按行循环赋值,不存要清空问题,得到是正确数据,把37个数据块读到对应a 的37行中。
    出现下标重复的是切割的时候,b()的下标。昨天下午还能正确读出来,下标72.(加第一个为空,共73个数据)。
      
      我把这段代码再粘贴处理第二个文件时,b()的下标就变成了144,可能这个时候要先把b()清掉,但此时b() = Split(a(i), Space(3))出错。把第二次粘贴的代码去掉,原来第一次的b() = Split(a(i), Space(3))也提示出错。不要b() = Split(a(i), Space(3))下面的循环赋值:
    For j = 0 To UBound(b) 
            arry(i, j) = b(j) 
        Next j
    只要一条b() = Split(a(i), Space(3)),还是提示该行出错。split()返回的不是静态数组吧,重新运行b()初始值应该为空的吧? 
      

  10.   


    Dim filename,instring,a(36),b() As String 
    Dim i,j As Integer 
    Dim arry(0 To 36, 0 To 72), arry1(0 To 36, 0 To 72) As Single 
    '变量定义不明确
    'filename,instring,a(36),arry(0 To 36, 0 To 72) 全部都是变体
    '修改为
    Dim filename as string,instring as string,a(36),b() As String 
    '..
      

  11.   


    '第一行,漏下一个
    Dim filename as string,instring as string,a(36) as string,b() As String 
      

  12.   

    dim a,b,c() as string 不行吗?
    必须 dim a as srring,b as string,c() as string 吗?
      

  13.   

    不一样的,dim a,b,c() as string 实际定义的是 a as Variant,b as Variant ,c as string
      

  14.   

    to :举杯邀明月
     
        试了下,确实如此。在读第二个文件的时候,的确应先要把a(i)清空,非常谢谢。to:AisaC
        我试了,现在可以了。
    把 Dim instring, tmp, a(36), b(), c() As String
    改成:Dim instring, tmp, a(36), b() As String, c() As String 为什么是定义不明呢?两者之间有什么区别吗?我一直以为是一样的。=我把这个弄完后,结贴。可以同时给2个人结贴吗?
    也谢谢,其他关心的朋友,希望在这个平台多向您们学习。
      

  15.   

    to AisaC ,知道了,谢谢。
      

  16.   

    问题已解决,但有点小问题,向请问下,怎么能对齐有正负号的数据呢?
    我写得CODE
    For i = 0 To 36
        Print #1, vbCr
        For j = 0 To 6
            Print #1, Space(3) + Format(arry2(i, j * 10 + 1), "0.0") + Space(3) + Format(arry2(i, j * 10 + 2), "0.0") + Space(3) + Format(arry2(i, j * 10 + 3), "0.0") + Space(3) + Format(arry2(i, j * 10 + 4), "0.0") + Space(3) + Format(arry2(i, j * 10 + 5), "0.0") + Space(3) + Format(arry2(i, j * 10 + 6), "0.0") + Space(3)+ Format(arry2(i, j * 10 + 7), "0.0") + Space(3) + Format(arry2(i, j * 10 + 8), "0.0") + Space(3)+ Format(arry2(i, j * 10 + 9), "0.0") + Space(3) + Format(arry2(i, j * 10 + 10), "0.0") + vbCr
        Next
        Print #1, Space(3) + Format(arry2(i, 71), "0.0") + Space(3) + Format(arry2(i, 72), "0.0") + vbCr
    Next得到的是:
       -1.8   -0.9   -1.6   -1.3   -1.1   -1.5   -1.6   -1.9   -1.4   -0.9
       -0.4   0.9   1.2   0.4   0.3   1.2   0.1   -0.3   -0.9   -0.9
       -0.6   0.0   0.8   1.4   1.4   1.9   1.9   1.9   1.7   1.3
       1.3   1.2   1.6   1.6   1.5   1.5   1.5   1.5   1.7   1.7
       2.3   2.4   1.2   1.4   1.0   0.3   0.9   1.6   1.9   1.1
       1.2   1.8   1.2   0.7   1.1   0.4   0.1   0.9   1.6   1.4
       1.0   1.5   2.5   2.1   1.9   2.2   2.0   1.1   0.5   0.7
       0.6   0.6怎么能对得更齐整呢?