我發現數百個答案逐行閱讀,但沒有一個您可以指定想要閱讀的行。 再說說我的文件看起來像這樣:StreamReader讀取特定行號
A
B
C
D
E
,我想讀線#3(在這種情況下,實際上線2 - 我想 - 可以說我想要的「C」)。
我該怎麼做?
我當然可以做一個循環,並停在選定的行,但沒有一個更好的(不那麼醜)這樣做?像MyStreamReader.Row(2).Read
或類似的東西?
我發現數百個答案逐行閱讀,但沒有一個您可以指定想要閱讀的行。 再說說我的文件看起來像這樣:StreamReader讀取特定行號
A
B
C
D
E
,我想讀線#3(在這種情況下,實際上線2 - 我想 - 可以說我想要的「C」)。
我該怎麼做?
我當然可以做一個循環,並停在選定的行,但沒有一個更好的(不那麼醜)這樣做?像MyStreamReader.Row(2).Read
或類似的東西?
最有效的方法是流線和計數每一行。在File.ReadAllLines
之前,您必須等待在訪問數組之前返回整個字符串數組。
一個簡單的方法是使用File.ReadLines
其工作原理類似於一個流讀取器:
Dim thirdLine = File.ReadLines(path).ElementAtOrDefault(2)
Enumerable.ElementAtOrDefault
返回Nothing
如果指定的索引過大。所以,你可以用這種方法檢查:
If thirdLine IsNot Nothing Then
Console.WriteLine("Third line: " & thirdLine)
Else
Console.WriteLine("The file doesn't contain 3 lines")
End If
不錯!謝謝! :) – gubbfett
該方法仍讀取整個文件,不是嗎?例如,當您閱讀索引2處的行時是否知道停止流式傳輸是否足夠智能? –
@ChrisDunaway:是的,只要索引達到延遲執行時間就立即停止。它與具有計數器變量的流讀取器相同,只是更具可讀性。但是,如果你在'ElementAtOrdefault'之前預先加入ToList或ToArray,整個文件將被讀入內存。 –
除非你有一個包含結構,以幫助您找到行(使得它不再真正與傳統意義上的行的文件),每個字節文件(或對必須進行檢查以確定行結束符。我不確定你認爲'Row(2)'能做什麼優化。 –
這個問題已經被回答了http://stackoverflow.com/questions/5404267/streamreader-and-seeking由於不同的編碼格式,您不能使用StreamReader查找或修改流的位置。如果你的線是固定的長度,你可以使用FileStream並用(LineLength * NumberOfLines)尋找或設置位置。 –
@Damien_The_Unbeliever - 我沒有真的在尋找優化,只是一種寫法,循環和停止索引。我正在尋找一個內置功能來做到這一點 - 並談論優化;內置函數通常也會更快一些? – gubbfett