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

时间:2013-10-23 09:10:02

标签: vb.net

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

我设法让随机数生效,但我不知道如何从 .txt 文件中读取特定行。

我对My.Computer.FileSystem.ReadAllText(filename, text, etc)非常熟练,但我似乎找不到任何方法来实现我的目标。

如果您可以提供帮助,最好是解决方案可以避免StreamReader

我会包含一些代码,但它只有几行长而且只包含随机生成器,因此非常自我解释。

3 个答案:

答案 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方法就没有问题,通常就是这种情况。