2015-11-02 72 views
0

我想讀取一個巨大的文件。以前我用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(); 
    } 

這很慢。我認爲每次跳過,然後繼續,每次循環時都會一遍又一遍讀取所有行。

有沒有更好的方法來做到這一點?我現在唯一能想到的解決方案就是將我的文件分割成更小的塊,這樣我就可以讀取它,但我無法真正相信沒有解決方法。

回答

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; 
    } 
+0

我需要閱讀當前行我讀的從previousLine和nextLine。我想你的方式,但它會有點複雜。當我解析數據時,會有很多if語句。 – ykh

+0

對不起,我剛剛意識到你還想要下一行。我更新了我的建議解決方案我相信你只需要單一的if語句吧? –