Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我不断收到错误消息';索引超出了数组';_Arrays_Vb.net - Fatal编程技术网

Arrays 我不断收到错误消息';索引超出了数组';

Arrays 我不断收到错误消息';索引超出了数组';,arrays,vb.net,Arrays,Vb.net,我试图将文本文件中的信息显示到多行文本框中。我运行了代码,但系统显示一条错误消息“索引超出了数组的界限”。没有明显的错误消息,我似乎无法操纵代码来解决这个问题。看一看: Public Class TeachCon Dim layout As String Dim Contacts(6) As Details Structure Details Dim Name As String Dim Email As String Dim RoomNum As String

我试图将文本文件中的信息显示到多行文本框中。我运行了代码,但系统显示一条错误消息“索引超出了数组的界限”。没有明显的错误消息,我似乎无法操纵代码来解决这个问题。看一看:

Public Class TeachCon

Dim layout As String
Dim Contacts(6) As Details

Structure Details
    Dim Name As String
    Dim Email As String
    Dim RoomNum As String
    Dim number1, number2 As Integer
End Structure

Sub LoadTeachContacts(ByRef Contacts() As Details)

    Dim TextFile As String = "\\Sjcdom01\mstudent\LHeywood\documents\A2\Computing\Comp 4 - Smail\Project\Text Files\Teacher Contact List.txt"
    Dim TextLine As String = ""
    Dim ArrayCounter As Integer = 0
    Dim objReader As New System.IO.StreamReader(TextFile)

    'loop through text file and load all contacts 
    Do While objReader.Peek() <> -1

        'read next line from file
        TextLine = TextLine & objReader.ReadLine() & vbNewLine

        'declare an array and use it to split line from file
        Dim TempArray() As String = Split(TextLine, ",")

        'transfer each array element into the appropriate part of the contacts stucture
        Contacts(ArrayCounter).Name = TempArray(0)
        *Contacts(ArrayCounter).Email = TempArray(1)*
        Contacts(ArrayCounter).RoomNum = TempArray(2)
        Contacts(ArrayCounter).number1 = TempArray(3)
        Contacts(ArrayCounter).number2 = TempArray(4)

        'empty string before reading next line from file
        TextLine = ""

        'increment array counter
        ArrayCounter = ArrayCounter + 1
    Loop
End Sub


Private Sub ButShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim ArrayCounter As Integer = 0
    LoadTeachContacts(Contacts)

    Do Until ArrayCounter = 3
        layout = Contacts(ArrayCounter).Name & "," & Contacts(ArrayCounter).Email & "," & Contacts(ArrayCounter).RoomNum & "," & Contacts(ArrayCounter).number1 & "," & Contacts(ArrayCounter).number2
        If ArrayCounter = 0 Then
            TextBox7.Text = layout
        End If

        ArrayCounter += 1
    Loop
End Sub

End Class
公共课堂教学
将布局调整为字符串
如图所示,调暗联系人(6)
结构细节
将名称设置为字符串
将电子邮件设置为字符串
Dim RoomNum作为字符串
Dim NUMBER 1,NUMBER 2为整数
端部结构
Sub-LoadTeachContacts(ByRef Contacts()作为详细信息)
Dim TextFile As String=“\\Sjcdom01\mstudent\LHeywood\documents\A2\Computing\Comp 4-Smail\Project\Text Files\Teacher Contact List.txt”
Dim TextLine As String=“”
Dim ArrayCounter作为整数=0
Dim objReader作为新System.IO.StreamReader(文本文件)
'循环浏览文本文件并加载所有联系人
Do While objReader.Peek()-1
'从文件中读取下一行
TextLine=TextLine&objReader.ReadLine()&vbNewLine
'声明一个数组并使用它从文件中拆分行
Dim TEMPARRY()作为字符串=拆分(文本行,“”)
'将每个数组元素转移到contacts结构的适当部分
联系人(ArrayCounter).Name=TempArray(0)
*联系人(ArrayCounter)。电子邮件=TempArray(1)*
联系人(ArrayCounter).RoomNum=TempArray(2)
触点(ArrayCounter)。编号1=临时阵列(3)
触点(ArrayCounter)。编号2=临时阵列(4)
'在从文件中读取下一行之前为空字符串
TextLine=“”
'增量数组计数器
ArrayCounter=ArrayCounter+1
环
端接头
Private Sub-ButShow_Click(ByVal发件人作为System.Object,ByVal e作为System.EventArgs)处理按钮2。单击
Dim ArrayCounter作为整数=0
加载示教触点(触点)
直到ArrayCounter=3为止
布局=联系人(ArrayCounter)。姓名和“,”和联系人(ArrayCounter)。电子邮件和“,”和联系人(ArrayCounter)。RoomNum和“,”和联系人(ArrayCounter)。号码1和“,”和联系人(ArrayCounter)。号码2
如果ArrayCounter=0,则
TextBox7.Text=布局
如果结束
阵列计数器+=1
环
端接头
末级

用*括起来的文本是系统说它超出数组边界的地方。

不知道文本文件中到底包含什么。但为了处理异常,请按如下所示更改代码

 'declare an array and use it to split line from file
    Dim TempArray() As String = Split(TextLine, ",")

    'transfer each array element into the appropriate part of the contacts stucture
     If TempArray.Length > 0 Then
    Contacts(ArrayCounter).Name = TempArray(0)
    *Contacts(ArrayCounter).Email = TempArray(1)*
    Contacts(ArrayCounter).RoomNum = TempArray(2)
    Contacts(ArrayCounter).number1 = TempArray(3)
    Contacts(ArrayCounter).number2 = TempArray(4)
    End If
    'empty string before reading next line from file
    TextLine = ""

嗯,您的一行可能拆分为一个比预期短的数组,因此索引不存在。在获取值之前,请检查数组的长度。也许是这样的

If TempArray.Length > 0 Then Contacts(ArrayCounter).Name = TempArray(0)
If TempArray.Length > 1 Then Contacts(ArrayCounter).Email = TempArray(1)
If TempArray.Length > 2 Then Contacts(ArrayCounter).RoomNum = TempArray(2)
If TempArray.Length > 3 Then Contacts(ArrayCounter).number1 = TempArray(3)
If TempArray.Length > 4 Then Contacts(ArrayCounter).number2 = TempArray(4)

如果您还可以提供文件的内容,这将非常有用:


“\Sjcdom01\mstudent\LHeywood\documents\A2\Computing\Comp 4-Smail\Project\Text Files\Teacher Contact List.txt”

我认为您应该检查该行是否为空,因为项0将作为空字符串无误地提供,但项1将在LoadTeachContacts子项中抛出“索引超出数组边界”

'read next line from file
            If objReader.ReadLine().Trim = "" Then Continue Do
            TextLine = TextLine & objReader.ReadLine() & vbNewLine

该数组有7个元素。文本文件包含更多内容的可能性有多大?我想大概是100%。使用
列表(详细信息)
。当Split()生成的数组太小时,您必须跳过空行并大叫。使用TempArray.Length进行检查。文本文件当前有三行,每行有5项数据。下面是我的文本文件a.Smail中的一行示例,asmail@stbedes.uk.net,A03107427658952A.Smail,asmail@stbedes.uk.net,A03107427658952那是什么元素?那是什么元素?它应该和我发布的代码运行良好,不管每行有多少个元素。也许您的文件在最后一行有一行结尾-这使得最后一行为空,并且只有一个元素长是的,zedd的代码应该运行良好,至少您不会收到错误消息。如果您没有获得预期的行为,则在
联系人(ArrayCounter).Name=TempArray(0)
行上放置一个中断行,并检查包含
TempArray
的内容。