vb输入超出文件尾 100
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) 这句话显示输入超出文件尾 展开
推荐于2016-03-31 · 知道合伙人软件行家
输入超出文件尾(错误 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 ' 关闭文件。
解释一下
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