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