对于上一个问题的可怕措辞,我很抱歉,我半睡半醒。这次我会更加清楚。
我目前正在编写一些迷你条码扫描器和库存管理器程序的代码。我已经获得了输入并且一切都已整理好,但是我的阵列存在问题。
我目前正在尝试提取库存文件的内容并将其分类到产品表中。 这是我目前获取数据的代码:
Using fs As StreamReader = New StreamReader("The File Path (Is private)")
Dim line As String = "ERROR"
line = fs.ReadLine()
While line <> Nothing
Dim pos As Integer = 0
Dim split(3) As String
pos = products.Length
split = line.Split("|")
productCodes(productCodes.Length) = split(0)
products(products.Length, 0) = split(1)
products(products.Length, 1) = split(2)
products(products.Length, 2) = split(3)
line = fs.ReadLine()
End While
End Using
我已确定文件路径确实会转到该文件。我查看了调试,发现所有数据都进入了我的&#34; split&#34;表。一旦我开始尝试传输数据,错误就会抛出。
这是我声明使用的两个表的地方:
Dim productCodes() As String = {}
Dim products(,) As Object = {}
有人可以解释为什么会这样吗?
提前致谢 〜水电
答案 0 :(得分:0)
通过像你那样声明数组:
Dim productCodes() As String = {}
Dim products(,) As Object = {}
您正在为所有数组指定大小0,因此在循环期间,它最终会尝试访问先前未向编译器声明的位置。它与声明大小为10 Dim MyArray(10)
的数组相同,并尝试访问位置11 MyArray(11) = something
。
您应该使用适当的大小声明它,或者在执行期间重新设置它:
Dim productCodes(10) As String
或
Dim productCodes() As String
Dim Products(,) As String
Dim Position as integer = 0
'code here
While line <> Nothing
Redim Preserve productCodes(Position)
Redim Preserve products(2,Position)
Dim split(3) As String
pos = products.Length
split = line.Split("|")
productCodes(Position) = split(0)
products(0,Position) = split(1)
products(1,Position) = split(2)
products(2,Position) = split(3)
line = fs.ReadLine()
Position+=1
End While