从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)都没有问题
还是下标越界啊
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)都没有问题
我看,应该有问题的是b(x - 6) = strt(x),因为Dim b(2) As String,只要UBound(data)>8,就下标越界!
你在data = Split(b(x - 6), "")
后面加上:debug.print UBound(data),看看打印出来的是什么?
For i = 0 To UBound(data)
a(n) = Val(data(i))-------错误行
n = n + 1
Print a(i)
Next i
Next
End Sub你加断点自己看看就好了
Private Sub Form_Load()
n = 0
For x = 6 To UBound(strt)
b(x - 6) = strt(x)
'Debug.Print b(x - 6)
Data = Split(b(x - 6))
For i = 0 To UBound(Data)
If x = 6 Then
ReDim a(UBound(Data))
Else
ReDim Preserve a(UBound(Data) + UBound(a) + 1)
End If
a(n) = Val(Data(i)) - ------错误行
n = n + 1
Print a(i)
Next i
Next
End Sub
结果全是0
n = 0
For x = 6 To UBound(strt)
b(x - 6) = strt(x)
'Debug.Print b(x - 6)
redim data(0 to 0)
Data = Split(b(x - 6)) '我觉得你需要跟踪的是每一次的data数组的变化,ubound多少,或者添加上我刚刚的那句
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)) - ------错误行
n = n + 1
Print a(n)
Next i
Next
End Sub
我是把把拓展数组放在小循环外面啊
你刚刚说的要添加的那句是哪句啊
Print a(n)
n = n + 1
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
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
NextEnd Sub这个代码我调试通过了,你拷贝过去试试看
ReDim filet(filelen - 1) 下标越界
你可能用了一个空白文件试验我的代码你每行后面的0是因为你换行前的行尾有个一空格
4 -3 0 1 空格
-2....
解决方法b(x - 6) = rtrim(strt(x))一个数据分两行的话,那就只能是逻辑方面了。不然程序如何知道-15而不是-1 5呢
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
改为
Data = trim(Split(b(x - 6)))
行尾那个数是3的话那个数肯定就是32,6的话就是64,12的话就是128,跳过后面那个数就是。
不过我不知道行尾怎么判断。另外那个文件就有点不好处理了。
不过就算一个数据分两行该数据还是连在一起的啊,中间没有空格。
往行尾那个数前多加几个空格它就到下行去了,而且数据是连在一起的。
就是比如说-12.345在一行,78在下一行。把-12.345移下一行数据就没有分开了。
数据分开的话一般都是因为txt文件的该行已经写满了,没写满的话数据还是没有分开的。
For i = 0 To UBound(b())
Input #2, temp
b(i) = Val(temp)
Next i
Close #2
这样读没有问题,不过我不知道这样读的话怎么从某行开始读
你之前给我代码是整行读取的
我这个是数据块读取
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
我的数组太大,超出了一维数组的范围,想改为二维的实现
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