繁体   English   中英

如何从VB.net中的.txt文件读取特定行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM