使用StreamReader时,循环会过早退出

时间:2015-03-18 12:43:49

标签: vb.net winforms

我编程已经很久了。我正在VB.NET中编写一个表单,并使用StreamReader读取文本文件并填充2D数组。这是文本文件:

あかさたなはまやらわん
いきしちにひみ り
うくすつぬふむゆる
えけせてねへめ れ
おこそとのほもよろを

这是循环,它在Load事件中。

Dim Line As String
Dim Row As Integer = 0
Using sReader As New IO.StreamReader("KanaTable.txt")

    Do
        Line = sReader.ReadLine
        For i = 0 To Line.Length - 1
            KanaTable(Row, i) = Line(i)
        Next
        Row += 1
    Loop Until sReader.EndOfStream

End Using

问题是,一旦For循环中的i达到10,它就会完成循环并跳过其他行,即使我有一个断点。你能告诉我这里可能会发生什么吗?

3 个答案:

答案 0 :(得分:1)

我已经弄明白了这个问题,这很简单。 KanaTable的数组声明:

Dim KanaTable(4, 9) As Char

应该是

Dim KanaTable(4, 10) As Char

因为数组中的空间少于应有的空间,调试器必须抛出一个我无法看到的IndexOutOfRange,因为,愚蠢的Windows bug(感谢Bradley Uffner指出这个bug) 。)

答案 1 :(得分:0)

如果你可以使用一个数组数组或一个数组列表(List(Of Char())),你可以将它归结为一行代码:

Dim KanaTable()() As Char = IO.File.ReadLines("KanaTable.txt").Select(Function(line) line.ToCharArray()).ToArray()

如果这对您来说太复杂,我们至少可以简化现有代码:

Dim KanaTable As New List(Of Char())
Dim Line As String
Using sReader As New IO.StreamReader("KanaTable.txt")

    Line = sReader.ReadLine()
    While Line IsNot Nothing 
        KanaTable.Add(Line.ToCharArray())
        Line = sReader.ReadLine()
    End While

End Using

答案 2 :(得分:-1)

我无法立即看到错误,但您可以尝试调整代码:

Using reader As New IO.StreamReader("KanaTable.txt")
    Do
        line= reader.ReadLine()
        If line = Nothing Then
            Exit Do
        End If

        For i = 0 To Line.Length - 1
            KanaTable(Row, i) = Line(i)
        Next
        Row += 1

    Loop
End Using