续vb实现矩阵运算之读取文件

applefree 2007-08-02 04:39:49
从txt文件从某行开始读,将数据赋值给一个数组
还是下标越界啊
Private Sub Command1_Click()
Dim filet() As Byte, filelen As Long, strt() As String, i As Long
Dim b(2) As String
Dim data() As String, a() As Long
Dim n As Long
Open "e:\3.txt" For Binary As #1
filelen = LOF(1)
ReDim filet(filelen - 1)
Get #1, , filet
filet = StrConv(filet, vbUnicode)
strt = Split(filet, vbCrLf)
'然后假如说你从第7行开始取值给b
n = 0
For x = 6 To UBound(strt)
b(x - 6) = strt(x)
'Debug.Print b(x - 6)
data = Split(b(x - 6), "")
ReDim a(UBound(data))
For i = 0 To UBound(data)
a(n) = Val(data(i))-------错误行
n = n + 1
Print a(i)
Next i
Next
End Sub

我的data肯定是有数据的啊
print data(i)都没有问题
...全文
844 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
applefree 2007-08-08
  • 打赏
  • 举报
回复
怎么没有响应啊。
小刀惋心帮帮啊,看你的程序能不能改成二维的。
不行的话那我就另外找思路好了。
  • 打赏
  • 举报
回复
和内存大小有关 多少维都一样的
applefree 2007-08-06
  • 打赏
  • 举报
回复
二维的话肯定要比一维的存储大一些吧
applefree 2007-08-06
  • 打赏
  • 举报
回复
2200列3326行读取的时候二维的可以,
一维的就不行啊,
说明二维应该存储大一些啊。
你那个程序能改成二维的吗?
  • 打赏
  • 举报
回复
多少维 都一样的 能够包含的元素不会增加的
applefree 2007-08-05
  • 打赏
  • 举报
回复
小刀惋心,你的这段代码有点不明白。能说说你的思路吗?
我的数组太大,超出了一维数组的范围,想改为二维的实现
For i = 0 To bc
t = a(i)
If t > 0 And (c(i) <> -9999) Then
t = 2 ^ (t - 1)
bsp(i + a_b(a(i))) = bsp(i + a_b(a(i))) Or t '累计儿子结点状况 最多8个 即当bsp(i)=255 或者 11111111(二进制)
End If
Next i

'开始正式转换
Do
Stoploop = True
For i = 0 To bc
If Not bcd(i) And (c(i) <> -9999) Then '判断是否计算过
If bsp(i) = 0 Then '判断结点是否是原始结点,没有儿子节点
If c(i) < 0 Then c(i) = 0 '处理小于0的
If a(i) = -9999 Then c(i) = -9999 '两个矩阵中只要有一个为-9999,则结果为-9999,
'如果希望结果仍然是b矩阵的值,可以不要这行代码
bcd(i) = True '表明该源汇值没有计算过
t = a(i)
If t > 0 Then
t = 2 ^ (t - 1)
c(i + a_b(a(i))) = c(i + a_b(a(i))) + c(i)
bsp(i + a_b(a(i))) = bsp(i + a_b(a(i))) Xor t '异或
Stoploop = False
End If
End If
End If
Next i
Print
Loop Until Stoploop
nettman 2007-08-05
  • 打赏
  • 举报
回复
Mark!
applefree 2007-08-04
  • 打赏
  • 举报
回复
一个23兆多,一个56兆多,这已经算大的了吧。
northwolves 2007-08-04
  • 打赏
  • 举报
回复
文本文件如果比较小,可以一次读取:

Private Sub Command1_Click()
Dim s() As String, i As Long, b(1 To 10) As String
Open "e:\3.txt" For Input As #2
s = Split(StrConv(InputB(LOF(2), 2), vbUnicode), vbCrLf)
Close #2
For i = 1 To 10
b(i) = Trim(s(i + 5)) ' 从第7行开始读
Next i
MsgBox Join(b, vbCrLf)
End Sub
applefree 2007-08-03
  • 打赏
  • 举报
回复
Open "e:\3.txt" For Input As #2
For i = 0 To UBound(b())
Input #2, temp
b(i) = Val(temp)
Next i
Close #2
这样读没有问题,不过我不知道这样读的话怎么从某行开始读
你之前给我代码是整行读取的
我这个是数据块读取
  • 打赏
  • 举报
回复
没有空格但是有回车
applefree 2007-08-03
  • 打赏
  • 举报
回复
是这样的,有个txt文件里面只有1,2,4,8,16,32,64,128,-9999,0这些数据(0只有一个),如果可以判断行尾那个数据就可以吧,如果是1的话就看下一个数据,是6的话肯定就是16,是28的话就是128,其他就是1,
行尾那个数是3的话那个数肯定就是32,6的话就是64,12的话就是128,跳过后面那个数就是。
不过我不知道行尾怎么判断。

另外那个文件就有点不好处理了。
不过就算一个数据分两行该数据还是连在一起的啊,中间没有空格。
往行尾那个数前多加几个空格它就到下行去了,而且数据是连在一起的。
就是比如说-12.345在一行,78在下一行。把-12.345移下一行数据就没有分开了。
数据分开的话一般都是因为txt文件的该行已经写满了,没写满的话数据还是没有分开的。
applefree 2007-08-03
  • 打赏
  • 举报
回复
现在可以了
就是一个数据分两行的话确实不好解决。
  • 打赏
  • 举报
回复
Data = Split(b(x - 6))
改为
Data = trim(Split(b(x - 6)))
  • 打赏
  • 举报
回复
小小修改下
n = 0
For x = 6 To UBound(strt)
b(x - 6) = strt(x)
'Debug.Print b(x - 6)
Data = Split(b(x - 6))
If x = 6 Then
ReDim a(UBound(Data))
Else
ReDim Preserve a(UBound(Data) + UBound(a) + 1)
End If
For i = 0 To UBound(Data)
if data(i)<>"" then
a(n) = Val(Data(i))
Print a(n)
n = n + 1
end if
Next i
Next
clear_zero 2007-08-02
  • 打赏
  • 举报
回复
我刚刚的代码我这里是通的
你可能用了一个空白文件试验我的代码

你每行后面的0是因为你换行前的行尾有个一空格
4 -3 0 1 空格
-2....
解决方法b(x - 6) = rtrim(strt(x))

一个数据分两行的话,那就只能是逻辑方面了。不然程序如何知道-15而不是-1 5呢
applefree 2007-08-02
  • 打赏
  • 举报
回复
clear zero你的程序不行啊,调试通不过
ReDim filet(filelen - 1) 下标越界
applefree 2007-08-02
  • 打赏
  • 举报
回复
现在没有刚才那个错误了
但是结果有点问题
例如我的第7行开始的数据是这样的
4 -3 0 1 第7行
-2 4 -1 第8行
5 2 -4 5 1 第9行
4 -3 -15 4 5 第10行
输出的结果是
4 -3 0 1 0 -2 4 -1 0 5 2 -4 5 1 0 4 -3 -15 0 0 4 5 0
每行后面都会多个0值
而且一个数据要是在两行的话就成了两个数据了。例如-15,就成了-1,5
两个空格的话就会输出两个0
这该怎么处理啊


clear_zero 2007-08-02
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim filet() As Byte, filelen As Long, strt() As String, i As Long
Dim b(2) As String
Dim data() As String, a() As Long
Dim n As Long
Open "c:\3.txt" For Binary As #1
filelen = LOF(1)
ReDim filet(filelen - 1)
Get #1, , filet
filet = StrConv(filet, vbUnicode)
strt = Split(filet, vbCrLf)
'????????7??????b
n = 0
For x = 6 To UBound(strt)
b(x - 6) = strt(x)
'Debug.Print b(x - 6)
data = Split(b(x - 6))
If x = 6 Then
ReDim a(UBound(data))
Else
ReDim Preserve a(UBound(data) + UBound(a) + 1)
End If
For i = 0 To UBound(data)
a(n) = Val(data(i)) '- ------???
Debug.Print a(n)
n = n + 1
Next i
Next

End Sub

这个代码我调试通过了,你拷贝过去试试看

  • 打赏
  • 举报
回复
n = 0
For x = 6 To UBound(strt)
b(x - 6) = strt(x)
'Debug.Print b(x - 6)
Data = Split(b(x - 6))
If x = 6 Then
ReDim a(UBound(Data))
Else
ReDim Preserve a(UBound(Data) + UBound(a) + 1)
End If
For i = 0 To UBound(Data)
a(n) = Val(Data(i)) - ------错误行
Print a(n)
n = n + 1
Next i
Next
加载更多回复(9)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧