VB打开TXT,输出超出文件尾,请高手指教

编一个小程序,将气象序列的资料改变格式编排,如图:

希望把格式变为“某年 1 2 3 ……12”
每一年为行,月值为列。程序代码为;
Dim a() As Variant
Dim N As Integer
Private Sub Command1_Click()
Open filename1 For Input As #1
Open filename2 For Output As #2
Do While Not EOF(1)
N = N + 1
ReDim Preserve a(20, N)
Input #1, a(1, N), a(2, N), a(3, N), a(4, N), a(5, N)
Loop
For i = 1 To N - 13
If a(2, i + 1) = a(2, i) Then
k = k + 1
Print #2, a(2, i); a(5, i); a(5, i + 1); a(5, i + 2); a(5, i + 3); …… a(5, i + 11); a(5, i + 12)
End If
Next i
End Sub

程序还没正式运行,就出现输出超出文件尾,调试时,黄色高亮指在Input#1那一行。这是什么原因呢?

首先,你的文本文件中每行只有4个数据,但你却用5个变量去读,这样读到最后一行的时候就会出现有些变量没有对应数据的情况,VB就会提示“输入超出文件尾”(注意哦,只有“输入超出文件尾”的,没有“输出超出文件尾”的);

其次,建议你最好不要用多个变量去读取文本数据,因为这对文本数据的格式是有严格要求的,即不能有空行(包括文件末尾也不能有空行)、每行的数据数量要绝对固定,否则就会出错。最好是先读取整行数据,再从中分解出每个数据。

下面是我改进后的代码,仅供参考:

Private Sub Command1_Click()
Dim s() As String, ss() As String
Dim i As Integer, n As Integer, o As Integer
Open filename1 For Binary As #1
s = Split(Input(LOF(1), #1), vbCrLf)
Close #1
Open filename2 For Output As #1
For i = 0 To UBound(s)
   Do While Instr(s(i), "  ")    '这三行是处理每行有多个空格的情况
      s(i) = Replace(s(i), "  ", " ")  '把多个空格变为1个空格
   Loop
   ss = Split(Trim(s(i)), " ")    '按空格分隔数据
   If UBound(ss) = 3 Then  '这是每行4个数据的情况,如果数量不同,改3即可
      n = Val(ss(1))   'ss(1)是每行的第二个数据
      If n = o Then
         Print #1, val(ss(3));  '同理,ss(3)就是第四个数据。注意分号不能删
      Else
         If o > 0 Then Print #1,
         Print #1, n; val(ss(3));
         o = n
      End If
   End If
Next
Close #1
End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-31
本回答被提问者采纳
相似回答