我目前正在尝试创建一个词汇测试程序。我真正想做的是让程序生成一个随机数,并让程序从与随机数对应的 .txt 文件中选择一行文本。
我设法让随机数生效,但我不知道如何从 .txt 文件中读取特定行。
我对My.Computer.FileSystem.ReadAllText(filename, text, etc)
非常熟练,但我似乎找不到任何方法来实现我的目标。
如果您可以提供帮助,最好是解决方案可以避免StreamReader
。
我会包含一些代码,但它只有几行长而且只包含随机生成器,因此非常自我解释。
答案 0 :(得分: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
例外。
答案 1 :(得分:1)
如果您确定该文件相当小,从文本文件中读取行的最简单方法是使用:
Dim lines = System.IO.File.ReadAllLines(fullFileName)
lines
将是一个字符串数组,因此您可以从该数组中访问随机行。
但如果你不确定文件很小,并且你不想冒内存不足的风险,StreamReader
真的不是那么糟糕 - 它&# 39;设计为在您阅读文本文件时易于使用,与FileStream
和其他一些有点棘手的方法不同。
首先,您需要知道文件中有多少行,因此您必须通读该文件一次,然后在您选择随机数后再次读取。< / p>
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
一旦你确定了有多少行,就可以选择你的随机数,然后重复这个过程,停在预定的行上。
答案 2 :(得分:0)
我有一个帖子here,它提供了ReadAll方法的替代方法。只要文件相对较小并且内存使用不是问题,ReadAll方法就没有问题,通常就是这种情况。