Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Vb.net VB 2008-索引超出数组的界限_Vb.net_Arrays - Fatal编程技术网

Vb.net VB 2008-索引超出数组的界限

Vb.net VB 2008-索引超出数组的界限,vb.net,arrays,Vb.net,Arrays,嘿,伙计们,我在读取程序的config.cfg文件时遇到了一个问题。我能读23。文件的字符,但我无法读取24。字符(文件中的最后一个字符) 代码如下: Dim CFGReader2 As System.IO.StreamReader CFGReader2 = _ My.Computer.FileSystem.OpenTextFileReader(CurDir() & "\Config.cfg") Dim Server(2) As String Server(0) = CFGReader2

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

代码如下:

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

谢谢你的回答


Frosty

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

编辑

让我解释一下

System.IO.StreamReader.ReadToEnd
返回您知道的字符串类型

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

因此,在您的代码中:

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

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

例如:

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

我希望这就是原因。
如果我的VB语法不正确,我会道歉,因为它不是我经常使用的语言。

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

编辑

让我解释一下

System.IO.StreamReader.ReadToEnd
返回您知道的字符串类型

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

因此,在您的代码中:

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

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

例如:

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

我希望这就是原因。
如果我的VB语法不正确,我会道歉,因为它不是我经常使用的语言。

以下是我如何为那些可能有同样疑问的人解决它的:

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.
目前它运行良好。大约一天后我会告诉你结果


另外,对于要从文件中读取的每个字符,您必须制作一个新的读取器。

以下是我如何为那些可能会产生相同疑问的人解决的问题:

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.
目前它运行良好。大约一天后我会告诉你结果


另外,对于要从文件中读取的每个字符,您必须制作一个新的读取器。

您能否修复代码,使其正常工作,因为我想我不明白它?谢谢。我还没有更正你的代码,但已经告诉你为什么它不太正确。谢谢你的回答,但它似乎是错的。当我测试什么是23。char表示为1(在txt文件中,我将“Server=11”更改为“Server=10”)。但是当我听你说的时候,22.6字符是空间。所以错误是“从字符串“”转换为类型“Double”无效。”但仍然是在我想要得到24的时候。char这是同一个老错误。谢谢你的回答。哦,还有一件事:如果我用23。char在两种情况下(在if之前和之后)第一个都是好的,但是第二个给了我错误。你能修复代码使它工作吗?因为我想我不明白?谢谢。我还没有更正你的代码,但已经告诉你为什么它不太正确。谢谢你的回答,但它似乎是错的。当我测试什么是23。char表示为1(在txt文件中,我将“Server=11”更改为“Server=10”)。但是当我听你说的时候,22.6字符是空间。所以错误是“从字符串“”转换为类型“Double”无效。”但仍然是在我想要得到24的时候。char这是同一个老错误。谢谢你的回答。哦,还有一件事:如果我用23。在这两种情况下(在if之前和之后),第一个都是好的,但是第二个给了我一个错误。类似于
Dim fileContents as String=IO.File.ReadAllText(CurDir()&“\Config.cfg”)
这样,您可以随时访问
fileContents.Chars(23)
fileContents.Chars(24)
。另一方面,如果您试图将服务器号获取为整数,则可能应该逐行读取文件,并使用
String.Split
integer.Parse
而不是此处使用的逐个字符的方法。是的-不要忘记,在使用StreamReader时,它会移动光标(要读取的位置)直到你停止阅读的地方。因此,为什么创建两个StreamReader会起作用,因为它会重置每次读取起始点的位置。尽管如此,您最好将首次读取文件的结果存储在一个变量中。类似于
Dim fileContents as String=IO.File.ReadAllText(CurDir()&“\Config.cfg”)
这样,您可以随时访问
fileContents.Chars(23)
fileContents.Chars(24)
。另一方面,如果您试图将服务器号获取为整数,则可能应该逐行读取文件,并使用
String.Split
integer.Parse
而不是此处使用的逐个字符的方法。是的-不要忘记,在使用StreamReader时,它会移动光标(要读取的位置)直到你停止阅读的地方。因此,为什么创建两个StreamReader会起作用,因为它会重置每次读取起点的位置。