Vb.net VB 2008-索引超出数组的界限
嘿,伙计们,我在读取程序的config.cfg文件时遇到了一个问题。我能读23。文件的字符,但我无法读取24。字符(文件中的最后一个字符) 代码如下: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
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会起作用,因为它会重置每次读取起点的位置。