vb输入超出文件尾

Private Sub Command1_Click()
Dim i%, ds%, hs%, pjs%
Dim dh#(), h#(), pj#(), s1#, s2#, ss1#, ss2#

ss1 = 0
ss2 = 0
CommonDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"
CommonDialog1.ShowOpen '打开对话框
strFileName = CommonDialog1.FileName '获得选中的文件名和路径
Open strFileName For Input As #1 '打开文件
Input #1, ds, hs, pjs
ReDim dh(1 To ds), h(1 To hs), pj(1 To pjs)
For i = 1 To ds
Input #1, dh(i)
Next i
For i = 1 To hs
Input #1, h(i)
Next i
For i = 1 To pjs
Input #1, pj(i)
Next i

For i = 1 To ds
If h(i) > 0 Or h(i + 1) > 0 Then
s1 = (h(i) + h(i + 1)) * pj(i) / 2
End If
If h(i) < 0 Or h(i + 1) < 0 Then
s2 = Abs((h(i) + h(i + 1)) * pj(i) / 2)
End If
If h(i) > 0 Or h(i + 1) < 0 Then
s1 = (pj(i) / (h(i) + Abs(i + 1)) * pj(i)) * h(i) / 2
s2 = Abs((pj(i) - (pj(i) / (h(i) + Abs(i + 1)) * pj(i))) * h(i + 1) / 2)
End If
If h(i) < 0 Or h(i + 1) > 0 Then
s1 = (pj(i) / (h(i) + Abs(i + 1)) * pj(i)) * h(i) / 2
s2 = Abs((pj(i) - (pj(i) / (h(i) + Abs(i + 1)) * pj(i))) * h(i + 1) / 2)
End If
ss1 = ss1 + s1
ss2 = ss2 + s2
Next i
Input #1, pj(i) 这句话显示输入超出文件尾

输入超出文件尾(错误 62)

不能对文件尾位置后进行读入。此错误有以下原因和解决方法:

Input # 或 Line Input #
语句要到已读完文件或空文件中读入数据。

在 Input # 语句之前直接使用 EOF
函数来测试是否处在文件的结尾。

在以 Binary 访问所打开的文件上使用 EOF 函数。

EOF 只能用在顺序 Input 访问所打开的文件上。在
Binary 访问所打开的文件上使用 Seek 和 Loc。

EOF 函数,返回一个 Integer,它包含 Boolean 值 True,表明已经到达为 Random
或顺序 Input 打开的文件的结尾。

EOF 函数示例

本示例使用 EOF 函数来检测文件尾。示例中假设 MYFILE
为有数个文本行的文本文件。

Dim InputData
Open "MYFILE" For Input As #1   ' ä¸ºè¾“入打开文件。
Do While Not EOF(1)   ' æ£€æŸ¥æ–‡ä»¶å°¾ã€‚
  Line Input #1, InputData   ' è¯»å…¥ä¸€è¡Œæ•°æ®ã€‚
  Debug.Print InputData   ' åœ¨ç«‹å³çª—口中显示。
Loop
Close #1   ' å…³é—­æ–‡ä»¶ã€‚

Seek 函数,返回一个 Long,在
Open 语句打开的文件中指定当前的读/写位置。

Seek 函数示例

本示例使用 Seek 函数来返回当前文件位置。示例中假设 TESTFILE
文件内含有用户自定义数据类型 Record 的记录。

Type Record   ' å®šä¹‰ç”¨æˆ·è‡ªå®šä¹‰æ•°æ®ç±»åž‹ã€‚
   ID As Integer
   Name As String * 20
End Type

'如果以随机方式打开文件,Seek è¿”回下一个记录的编号。
Dim MyRecord As Record   ' å£°æ˜Žå˜é‡ã€‚
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
Do While Not EOF(1)   ' å¾ªçŽ¯è‡³æ–‡ä»¶å°¾ã€‚
   Get #1, , MyRecord   ' è¯»å…¥ä¸‹ä¸€ä¸ªè®°å½•ã€‚
   Debug.Print Seek(1)   ' åœ¨ç«‹å³çª—口中显示记录号。
Loop
Close #1   ' å…³é—­æ–‡ä»¶ã€‚

'如果不以 Random æ–¹å¼æ‰“开文件,则 Seek è¿”回下一个操作会发生的位置。假设 
TESTFILE æ–‡ä»¶å†…含有文本数据。
Dim MyChar
Open "TESTFILE" For Input As #1   ' æ‰“开输入文件。
Do While Not EOF(1)   ' å¾ªçŽ¯è‡³æ–‡ä»¶å°¾ã€‚
   MyChar = Input(1, #1)   ' è¯»å…¥ä¸‹ä¸€ä¸ªå­—符。
   Debug.Print Seek(1)   ' å°†ä¸‹ä¸€å­—符的位置显示在立即窗口。
Loop
Close #1   ' å…³é—­æ–‡ä»¶ã€‚

Loc 函数,返回一个 Long,在已打开的文件中指定当前读/写位置。

Loc 函数示例

本示例使用 Loc 函数来返回在打开的文件中当前读写的位置。 本示例假设
TESTFILE 文件内含数行文本数据。

Dim MyLocation, MyLine
Open "TESTFILE" For Binary As #1   ' æ‰“开刚创建的文件。
Do While MyLocation < LOF(1)   ' å¾ªçŽ¯è‡³æ–‡ä»¶å°¾ã€‚
   MyLine = MyLine & Input(1, #1)   ' è¯»å…¥ä¸€ä¸ªå­—符到变量中。
   MyLocation = Loc(1)   ' å–得当前位置。
' åœ¨ç«‹å³çª—口中显示。
   Debug.Print MyLine : Tab : MyLocation
Loop
Close #1   ' å…³é—­æ–‡ä»¶ã€‚
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-27
原因在你没有分析文本文件的数据量和你的是否一致,
解释一下
Input #1, ds, hs, pjs '这行是在第一行取出三个数值,看你的意思是三个数组的大小
ReDim dh(1 To ds), h(1 To hs), pj(1 To pjs)
For i = 1 To ds '从下一行(准确是第二行)开始读取ds个数值到数组dh里
Input #1, dh(i)
Next i
For i = 1 To hs '从下一行(是ds+2行)开始读取ds个数值到数组h里
Input #1, h(i)
Next i
For i = 1 To pjs '从下一行(是hs+ds+2行)开始读取ds个数值到数组h里

Input #1, pj(i) '如果这个超出文件尾,那显然是你的文本文件行数不够
Next i
'说道最后因为你没有判断是否超出文件尾,所以文本文件行数不够,出现这个是必然的,如果你不知道有多少行,你可以这样
If Not EOF(1) Then

Input #1, ds, hs, pjs
ReDim dh(1 To ds), h(1 To hs), pj(1 To pjs)
For i = 1 To ds

If Not EOF(1) Then Input #1, dh(i)
Next i
For i = 1 To hs
If Not EOF(1) Then Input #1, h(i)
Next i
For i = 1 To pjs
If Not EOF(1) Then Input #1, pj(i)
Next i

End If本回答被网友采纳
第2个回答  2012-05-27
fdsds
相似回答