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
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
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
另外就是b() = Split(a(i), Space(3)) 类型不匹配问题,不知道是什么原因。
===>
b = Split(a(i), Space(3))
另外按您上面的代码运行,没有提示语法错误,但及时窗口只输出了3个空格, 也没有消息提示框弹出。strFile里可能没东西。
倒是给 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 后面不要带变量。
忘记了,VB 中可以自动类型转换,给 arry1() 的元素赋值时应该不会出错~~~~
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()初始值应该为空的吧?
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
'..
'第一行,漏下一个
Dim filename as string,instring as string,a(36) as string,b() As String
必须 dim a as srring,b as string,c() as string 吗?
试了下,确实如此。在读第二个文件的时候,的确应先要把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个人结贴吗?
也谢谢,其他关心的朋友,希望在这个平台多向您们学习。
我写得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怎么能对得更齐整呢?