vb输入超出文件尾 100

PrivateSubCommand1_Click()Dimi%,ds%,hs%,pjs%Dimdh#(),h#(),pj#(),s1#,s2#,ss1#,ss2#ss1=... 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) 这句话显示输入超出文件尾
展开
 我来答
zdingyun
推荐于2016-03-31 · 知道合伙人软件行家
zdingyun
知道合伙人软件行家
采纳数:15429 获赞数:48174
1982年上海业余工业大学化工系毕业 现退休

向TA提问 私信TA
展开全部

输入超出文件尾(错误 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   ' 关闭文件。
最美乡村行
2012-05-27 · TA获得超过1136个赞
知道大有可为答主
回答量:1191
采纳率:0%
帮助的人:1634万
展开全部
原因在你没有分析文本文件的数据量和你的是否一致,
解释一下
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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
q5962232
2012-05-27
知道答主
回答量:33
采纳率:0%
帮助的人:13万
展开全部
fdsds
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式