24小时热门版块排行榜    

查看: 1201  |  回复: 13
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

huzijun888

铜虫 (小有名气)

[求助] VB文件读取的问题!!!急

我有一个TXT文件想用VB编个小程序来处理一下,请问在VB里如何把这个data.txt读入,并且每行数据分别赋值给a(i,i)   a(i,2)   a(i,3)直至文件中的数据被读取完。下面是我的思路,被提示下标越界,求指点!!!

Private Sub Command1_Click()
Dim a() As Single, i As Long
i = 1
Open "data.txt" For Input As #1
Do While Not EOF(1)
    Input #1, a(i, 1), a(i, 2), a(i, 3)
   i = i + 1
Loop
Close #1
End Sub

未命名.jpg
回复此楼

» 猜你喜欢

致力于更合理、更有效、更准确地应用计算流体力学软件解决实际问题
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zjzc511

银虫 (小有名气)

代码如下
Dim a() As Single
Dim LineNum  As Long
Private Sub Command1_Click()
Dim i, j, k As Long
Dim TextLine As String
Dim EachText() As String
LineNum = 0
Open App.Path & "\data.txt" For Input As #1
Do While Not EOF(1)
   Line Input #1, TextLine
   LineNum = LineNum + 1
Loop
Close #1
ReDim a(LineNum - 1, 2)
Open App.Path & "\data.txt" For Input As #1
i = 0
Do While Not EOF(1)
    Line Input #1, TextLine
    EachText = Split(TextLine, " ", -1, vbTextCompare)
    k = 0
    For j = 0 To UBound(EachText)
        If EachText(j) <> "" Then
            a(i, k) = CSng(EachText(j))
            k = k + 1
        End If
    Next
   i = i + 1
Loop
Close #1
Command2.Enabled = True
MsgBox ("读取数据成功"
End Sub
Private Sub Command2_Click()
Dim Xmax, Xmin, Ymax, Ymin, Zvalue As Single
Dim Count As Long
If IsNumeric(TextXMax.Text) And IsNumeric(TextXMin.Text) And _
IsNumeric(TextYMax.Text) And IsNumeric(TextYMin.Text) And _
IsNumeric(TextZ.Text) Then
    Xmax = CSng(TextXMax.Text)
    Xmin = CSng(TextXMin.Text)
    Ymax = CSng(TextYMax.Text)
    Ymin = CSng(TextYMin.Text)
    Zvalue = CSng(TextZ.Text)
   
    If Xmax < Xmin Then
        MsgBox ("X最大最小值有误"
        Exit Sub
    End If
   
    If Ymax < Ymin Then
        MsgBox ("Y最大最小值有误"
        Exit Sub
    End If
   
   
    Open App.Path & "\result.txt" For Output As #1
        For i = 0 To LineNum - 1
            If a(i, 0) <= Xmax And a(i, 0) >= Xmin And _
                a(i, 1) <= Ymax And a(i, 1) >= Ymin And _
                a(i, 2) <> Z Then
                Print #1, a(1, 0) & "  " & a(i, 1) & "  " & a(i, 2)
                Count = Count + 1
            End If
        Next
    Close #1
   
    MsgBox ("有" & CStr(Count) & "行输出"
Else
    MsgBox ("请输入数字"
End If
End Sub
23
14楼2014-05-31 21:06:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 14 个回答

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2013-04-07 01:49:33
huzijun888: 金币+6, ★★★★★最佳答案, 非常感谢,耐心解答 2013-04-07 19:59:13
你的用法涉及2个错误:
1.二维数组定义,必须用逗号分隔2个维度,例如Dim a(,) as Single,如果没有逗号Dim a() as Single声明的是一维数组

2.动态数组定义后,在长度不够时,需要Redim来扩容(vb如果是扩大数组,原来的数据不会丢失)

因此,你需要做的是,重新定义a为二维数组,并且在循环中不停redim a(length_of_a+1,1 to 3)
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2013-04-06 21:59:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huzijun888

铜虫 (小有名气)

引用回帖:
2楼: Originally posted by libralibra at 2013-04-06 21:59:05
你的用法涉及2个错误:
1.二维数组定义,必须用逗号分隔2个维度,例如Dim a(,) as Single,如果没有逗号Dim a() as Single声明的是一维数组

2.动态数组定义后,在长度不够时,需要Redim来扩容(vb如果是扩大数组,原来的 ...

兄弟,我搞不定啊!

1.首先,按照你说的第一条语句就直接报错了

2.我增加redim语句扩容还是下标越界

这是我现在的语句:
Private Sub Command1_Click()
Dim a() As Single, i As Long
i = 1
Open "data.txt" For Input As #1
Do While Not EOF(1)
   ReDim Preserve a(i, 1 To 3)
   Input #1, a(i, 1), a(i, 2), a(i, 3)
   i = i + 1
Loop
Close #1
End Sub
致力于更合理、更有效、更准确地应用计算流体力学软件解决实际问题
3楼2013-04-07 10:22:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chelator

木虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
你用的是什么VB,若是VB6
Preserve只能增加最后一维空间
ReDim Preserve a(3, i)

建议先计算行数

dim LineNum  As Long
dim TextLine as String
LineNum = 0
Open "data.txt" For Input As #1
Do While Not EOF(1)   
   LineInput #1, TextLine
  LineNum =LineNum + 1
Loop
Close #1

再申请数组
Redim A(LineNum,3)
Open "data.txt" For Input As #1
Do While Not EOF(1)   
   Input #1, a(i, 1), a(i, 2), a(i, 3)
   i = i + 1
Loop
Close #1


另VB.NET 才使用二维数组定义
4楼2013-04-07 11:58:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见