我有包含200000行的文本文件。我想先阅读50000行,然后处理它,然后读取第二部分说50001到100000等。当我读第二块时,我不写入第一个到第500个循环。我希望读者指针直接转到行号50001并开始阅读。
怎么可能?哪个读者用于此?
答案 0 :(得分:0)
除非行的长度完全相同,否则无法直接从第50001行开始。
然而,您可以做的是在读取前50000行时,记住最后一行的结束位置。然后,您可以直接寻找该偏移并继续从那里读取。
如果行长度是固定的,你可以这样做:
myfile.Seek(50000 * (rowCharacters + 2), SeekOrigin.Begin);
Seek转到 bytes 中的特定偏移量,因此您只需要告诉它50000行占用的字节数。给定ASCII编码,这是行中的字符数,加上换行符的2。
答案 1 :(得分:0)
您需要StreamReader课程。
有了这个,您可以使用ReadLine()
方法逐行阅读。您需要自己跟踪行数并调用每50000行处理数据的方法,但只要您打开阅读器,就不需要重新开始阅读。
答案 2 :(得分:0)
不幸的是,你无法跳过计算线数。在原始级别文件不适用于行号。相反,它们以位置/偏移为基础工作。根文件系统没有行的概念。它是由更高级别组件添加的概念。
所以无法告诉操作系统,请在指定的行打开文件。相反,您必须打开文件并跳过计算新行,直到您通过指定的数字。然后将下一组字节存储到一个数组中,直到你到达下一个新行。
虽然如果每行都有相同的字节数,那么您可以尝试以下操作。
using( Stream stream = File.Open(fileName, FileMode.Open) )
{
stream.Seek(bytesPerLine * (myLine - 1), SeekOrigin.Begin);
using( StreamReader reader = new StreamReader(stream) )
{
string line = reader.ReadLine();
}
}
答案 3 :(得分:0)
我认为最好的方法是使用流阅读器,
以下是您的两个相关问题,您可以从中获得答案。但最终如果你想获得文本块,除非它是一定数量,否则很难做到。
但是我相信这些将是一个很好的阅读使用:
这个展示了如何分离要读取的代码块。这个问题的答案最合适,您可以设置条件来读取已读取的行数,并设置条件以检查行数是否= = 50000左右然后执行某些操作。
正如您所见
这个答案使用了关键字continue,我认为这对你打算做的事情有用。
这篇文章向您展示了一个更易读的答案,但并没有真正回答您在阅读块时所寻找的内容。
对于你的问题,我相信你想要做的事情让你感到困惑,似乎你想突出显示50000行,然后将其作为一个读取,这不是流读取器的工作方式,而是逐行阅读使这个过程更长,但不幸的是情况就是这样。