逐块读取文本文件

时间:2013-07-12 10:28:24

标签: c#

我有包含200000行的文本文件。我想先阅读50000行,然后处理它,然后读取第二部分说50001到100000等。当我读第二块时,我不写入第一个到第500个循环。我希望读者指针直接转到行号50001并开始阅读。

怎么可能?哪个读者用于此?

4 个答案:

答案 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行,然后将其作为一个读取,这不是流读取器的工作方式,而是逐行阅读使这个过程更长,但不幸的是情况就是这样。