【问题标题】:Fast Reading File With Indices带索引的快速读取文件
【发布时间】:2016-02-01 22:22:56
【问题描述】:

我正在尝试读取一个巨大的文件。以前我使用File.ReadLines,它不会将整个数据读入内存。现在我需要在迭代时访问上一行和下一行。我尝试阅读整个文件,但得到了OutofMemoryException

然后我开始寻找解决方案,发现我可以使用 Linq。我尝试使用以下内容:

    var inputLines = File.ReadLines(filePath);
    int count = inputLines.Count();
    for (int i = 0; i < count; i++)
    {
        string line = inputLines.Skip(i).Take(1).First();
    }

这很慢。我认为每次它 Skip 然后 Take 时,它​​都会在每个循环中一遍又一遍地读取所有行。

有没有更好的方法呢?我现在能想到的唯一解决方案是将我的文件分成更小的块,以便我可以阅读它,但我真的不敢相信没有解决方法。

【问题讨论】:

    标签: c# linq readlines


    【解决方案1】:

    您是否遍历文件中的所有行,并且每次查看新行时都想比较三行(上一行、当前行和下一行)?

    如果是这样,那么在遍历所有这些行时跟踪最后两行如何:

        string previousLine = null,
               currentLine = null;
    
        foreach (string nextLine in File.ReadLines(filePath))
        {
            if (previousLine == null)
            {
                // Do something special for the first two lines?
            }
            else
            {
                // You're past the first two lines and now have previous,
                // current, and next lines to compare.
            }
    
            // Save for next iteration
            previousLine = currentLine;
            currentLine = nextLine;
        }
    

    【讨论】:

    • 我需要阅读我正在阅读的当前行的上一行和下一行。我想到了你的方式,但它会有点复杂。解析数据时会有很多if语句。
    • 对不起,我刚刚意识到你也想要下一行。我更新了我提出的解决方案。我相信你只需要一个 if 语句对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2021-04-12
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多