[英]How to read a specific line from a .txt file in VB.net
我目前正在尝试创建一个词汇测试程序。 我真正想做的是让程序生成一个随机数,并让程序从.txt文件中选择与该随机数相对应的一行文本。
我设法使随机数起作用,但是我不知道如何从.txt文件中读取特定行。
我对My.Computer.FileSystem.ReadAllText(filename, text, etc)
相当精通,但是我似乎找不到任何方法来实现我的目标。
如果可以帮助,则解决方案最好避免使用StreamReader
。
我会包含一些代码,但是它只有几行,并且只包含随机数生成器,所以很容易说明。
您可以使用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
异常。
如果您确定文件会很小,那么从文本文件读取行的最简单方法是使用:
Dim lines = System.IO.File.ReadAllLines(fullFileName)
lines
将是一个字符串数组,因此您可以从该数组访问随机行。
但是,如果您不确定文件太小,并且不想冒险用完内存,那么StreamReader
的确不是那么糟糕-它的设计目的是在读取文本文件时易于使用,与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
确定行数后,您可以选择随机数,然后重复该过程,并在预定行处停止。
我在这里有一篇文章,提供了ReadAll方法的替代方法。 只要文件相对较小并且内存使用率不成问题,ReadAll方法就没有问题,通常是这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.