我发现数百个答案逐行阅读,但没有一个您可以指定想要阅读的行。 再说说我的文件看起来像这样: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