0

我目前正在尝试创建一个词汇测试程序。我真正想做的是让程序生成一个随机数,并让程序从与随机数对应的.txt文件中选择一行文本。

我已经设法让随机数起作用,但我不知道如何从.t​​xt文件中读取特定行。

我相当精通My.Computer.FileSystem.ReadAllText(filename, text, etc),但我似乎找不到任何方法来实现我的目标。

如果您能提供帮助,如果解决方案可以避免StreamReader.

我会包含一些代码,但是它只有几行长,并且只包含随机生成器,所以很容易解释。

4

3 回答 3

2

您可以使用System.IO.File.ReadAllLines数组索引器:

Private Shared rnd As New Random()

Public Shared Function GetRandomLine(path As String) As String
    Dim allLines As String() = File.ReadAllLines(path)
    Dim randomLine As String = allLines(rnd.Next(allLines.Length))
    Return randomLine
End Function

请注意,Random.Next使用一个参数会创建一个从 0 到的随机数allLines.Length - 1(因此排他上限)。这是正确的,否则你会得到一个IndexOutOfRangeException例外。

于 2013-10-23T09:19:56.650 回答
1

如果您确定文件会相当小,那么从文本文件中读取行的最简单方法是使用:

Dim lines = System.IO.File.ReadAllLines(fullFileName)

lines将是一个字符串数组,因此您可以访问该数组中的随机行。

但是,如果您不确定文件是否很小,并且您不想冒内存不足的风险,那么 aStreamReader真的还不错 - 它的设计目的是在您阅读文本文件时易于使用,不像FileStream还有一些其他的方法,这些方法有点棘手。

首先,您需要知道文件中有多少行,因此您必须通读一次文件,然后在您选择一个随机数后再次阅读。

Dim numLines as Integer = 0
Using sr As New System.IO.StreamReader(fullFileName)
    Dim line As String = sr.ReadLine()
    While line IsNot Nothing
        numLines = numLines + 1
        line = sr.ReadLine()
    End While
End Using

一旦你确定有多少行,你可以选择你的随机数,然后重复这个过程,在预定的行处停止。

于 2013-10-23T09:25:40.753 回答
0

我在这里有一篇文章,提供了 ReadAll 方法的替代方法。只要文件相对较小并且内存使用不是问题,ReadAll 方法就没有问题,通常情况下是这样。

于 2013-10-23T15:05:36.637 回答