| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 596 人关注过本帖
标题:这是从 txt 中读取二维数组,但是老报错:下标越界, 求大神解救!!!谢谢 ...
只看楼主 加入收藏
yangfang577
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-3-11
结帖率:60%
收藏
已结贴  问题点数:8 回复次数:9 
这是从 txt 中读取二维数组,但是老报错:下标越界, 求大神解救!!!谢谢!我的二维数组大概有 50*6 左右
Private Sub Command1_Click()
Dim str1() As String
Dim str2() As String
Dim arr() As String
Dim rows As Integer
Dim cols As Integer
Dim i As Integer
Dim j As Integer
Open "c:\in.txt" For Input As #1
rows = 0
Do Until EOF(1)
rows = rows + 1
ReDim Preserve str1(rows) As String
Line Input #1, str1(rows)
cols = UBound(Split(str1(rows), ","))
Loop
Close #1
ReDim arr(rows, cols) As String
For i = 1 To rows
str2 = Split(str1(i), ",")
For j = 0 To cols
arr(i, j) = str2(j)
Print "arr(" & i & "," & j & ")=" & arr(i, j),
Next
Print
Next
End Sub
搜索更多相关主题的帖子: 左右 
2014-06-16 22:00
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:3 
根据你的题意自创了个in.txt文件,40组数据,未发现报错,检查下你的in.txt文件,或提供你的in.txt文件调试下就知道了。
2014-06-17 09:36
yangfang577
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-3-11
收藏
得分:0 
回复 2 楼 xzlxzlxzl
1,1,0,0,2,0,3,3,
2,3,0,0,5,3,3,3,
这就是in.txt内容  谢谢
2014-06-19 10:40
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
真不好意思,还是没有发现错误,见下图:
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-06-19 11:04
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:3 
【,】
【,】
2014-06-19 22:33
yangfang577
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-3-11
收藏
得分:0 
想哭,这是我的运行结果,我电脑是 win7 系统,txt 是 07 版本
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-06-20 11:42
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:3 
仔细看了你们的代码。
代码的流程无问题,问题出在数据文件上,存在空行,而代码里没有容错处理,导致下标越界。


Private Sub Command1_Click()
Dim str1() As String
Dim str2() As String
Dim arr() As String
Dim rows As Integer
Dim cols As Integer
Dim cols2 As Integer              '增加一个变量
Dim i As Integer
Dim j As Integer
Open "C:\in.txt" For Input As #1
rows = 1
Do Until EOF(1)
'rows = rows + 1              '移到后面处理
ReDim Preserve str1(rows) As String
Line Input #1, str1(rows)
cols = UBound(Split(str1(rows), ","))          '找每次的下标
If cols2 < cols Then cols2 = cols              '保存最大的下标
If Len(str1(rows)) > 0 Then rows = rows + 1    '因为存在空行,所以空行不计数,直接跳。如果数据的最后有空行,会导致最后多一个空行。

Loop
Close #1
ReDim arr(rows, cols2) As String               '按最大下标生成数组,前面的代码,如果空行在最后,那么这里报错。
For i = 1 To rows
str2 = Split(str1(i), ",")
For j = 0 To UBound(str2)                      '按当前下标复制数据。前面的代码,如果空行在中间,那么这里报错。
arr(i, j) = str2(j)
Print "arr(" & i & "," & j & ")=" & arr(i, j),
Next
Print
Next
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2014-06-21 11:57
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
好吧,的确应该像7楼版主那样考虑下极端情况,要有一定的容错能力。不过应该是使用最小的cols,如果像7楼那样使用最大的cols的话,对少于cols的行split就会产生下标越界的错误,修改后的代码如下:
Private Sub Command1_Click()
Dim str1() As String
Dim str2() As String
Dim arr() As String
Dim rows As Integer
Dim cols As Integer
Dim i As Integer
Dim j As Integer
Open "c:\in.txt" For Input As #1
rows = 0
Do Until EOF(1)
rows = rows + 1
ReDim Preserve str1(rows) As String
Line Input #1, str1(rows)
i = UBound(Split(str1(rows), ","))
If cols > i Or cols <= 0 Then cols = i
Loop
Close #1
ReDim arr(rows, cols) As String
For i = 1 To rows
If str1(i) <> "" Then
str2 = Split(str1(i), ",")
For j = 0 To cols
arr(i, j) = str2(j)
Print "arr(" & i & "," & j & ")=" & arr(i, j),
Next
Print
End If
Next
End Sub
2014-06-23 05:57
yangfang577
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-3-11
收藏
得分:0 
回复 2 楼 xzlxzlxzl
in.zip (543 Bytes)

这是我的in 文件 但是我怎么弄都不对 我觉得是这个TXT文件的原因 但是找不出来  
2014-06-27 11:48
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
回复 9 楼 yangfang577
没看懂什么意思。

你提供的附件里的文件,正常的很,没任意问题啊。

授人于鱼,不如授人于渔
早已停用QQ了
2014-06-27 15:04
快速回复:这是从 txt 中读取二维数组,但是老报错:下标越界, 求大神解救!!! ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031697 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved