VB 2008 - 索引超出了数组的范围

时间:2010-04-30 09:53:05

标签: vb.net arrays

嘿伙计们在阅读我程序的config.cfg文件时遇到问题。我可以读取该文件的23.字符,但我无法读取24. char(文件中的最后一个字符)。

这是代码:

Dim CFGReader2 As System.IO.StreamReader
CFGReader2 = _
My.Computer.FileSystem.OpenTextFileReader(CurDir() & "\Config.cfg")
Dim Server(2) As String
Server(0) = CFGReader2.ReadToEnd.Chars(23)//This part works

    If Server(0) = 0 Then
        Server(1) = CFGReader2.ReadToEnd.Chars(24)//This part results in "Index was outside the bounds of the array".
    ElseIf Server(0) = 1 Then
        Server(2) = CFGReader2.ReadToEnd.Chars(24)//This part results in "Index was outside the bounds of the array".
        Server(1) = 10 + Server(2)
    ElseIf Server(0) = 2 Then
        Server(2) = CFGReader2.ReadToEnd.Chars(24)//This part results in "Index was outside the bounds of the array".
        Server(1) = 20 + Server(2)
    ElseIf Server(0) = 3 Then
        Server(2) = CFGReader2.ReadToEnd.Chars(24)//This part results in "Index was outside the bounds of the array".
        Server(1) = 30 + Server(2)
    End If

这是文件:

语言= 2

服务器= 11

感谢您的回答!

2 个答案:

答案 0 :(得分:3)

数组的编号从0开始。因此,24个字符将是数组索引0到数组索引23。

修改

让我解释一下。

如你所知,

System.IO.StreamReader.ReadToEnd返回一个String类型。

String.Chars()允许您以数组形式访问sring,索引库为0。

因此在您的代码中:

CfgReader.ReadToEnd.Chars(23)是因为它访问最后一个字符,即字符串中的第24个字符。

CfgReader.ReadToEnd.Chars(24)不起作用,因为它试图访问字符串中不存在的第25个字符。

例如:

如果一个字符串包含以下字符:“abcdef”它的长度为6,因为它包含6个字符,但“a”位于0位置,b位于位置1。 所以

Dim testString As String
Set testString = "abcdef"

Dim testChar As Char

testChar = testString.Chars(0) // testChar = a
testChar = testString.Chars(5) // testChar = f
testChar = testString.Chars(6) // will throw an exception as we are accessing a position beyond the end of the string.

我希望能够解释它。 如果我的VB语法不是我经常使用的语言,我会道歉。

答案 1 :(得分:0)

以下是我为那些可能会有同样想法的人解决的问题:

Dim CFGReader(2) As System.IO.StreamReader

CFGReader(0) = My.Computer.FileSystem.OpenTextFileReader(CurDir() & "\Config.cfg")

Dim Server(2) As String

Server(0) = CFGReader(0).ReadToEnd.Chars(24)

CFGReader(1) = My.Computer.FileSystem.OpenTextFileReader(CurDir() & "\Config.cfg")

Server(1) = CFGReader(1).ReadToEnd.Chars(23)

Server(2) = Server(1) + Server(0)

MsgBox(Server(2)) // This is just to test it.

现在它完美无缺。我会在一天左右后告诉你结果。

P.S。对于您想要从文件中读取的每个字符,您必须创建一个新的读者。