2010-08-30 47 views
1

在某些特殊情況下,我需要一些行前後當前位置c#streamreader文本文件讀取行前/後

例如,

pubic string[] getLines(string value, int linesBefore, int linesAfter){ 

    _streamReader = new StreamReader("file.tmp"); 
    string[] returnValue; 

    string line = _streamReader.ReadLine(); 
    while (Line.instr() < 0) 
    { 
     Line = _streamReader.ReadLine(); 
    } 

    returnValue = READ "value linesBefore" 
       + Line // Current Line 
       + READ "value linesAfter" 
} 

最後3行是我需要的。

有沒有簡單的方法來做到這一點?

謝謝

斯特凡

回答

0

如果文件不是太大,你可以只讀取整個文件,每行存入一個List<String>,然後抓住最後三行。如果文件非常大,請使用Queue類 - 將行推入隊列並調用TrimToSize以將其保持在所需的行數。當然,要獲得「後續行」,你必須再讀一行。

0

您可以在循環中保留上一行的副本,然後在循環後使用另外的ReadLine()。

pubic string[] getLines(string value, int linesBefore, int linesAfter){ 

_streamReader = new StreamReader("file.tmp"); 
string[] returnValue; 

string Line = _streamReader.ReadLine(); 
string prevLine; 
while (Line.instr() < 0) 
{ 
    prevLine = Line; 
    Line = _streamReader.ReadLine(); 
} 

string postLine = _streamReader.ReadLine(); 

returnValue = prevLine + Line + postLine; 
} 

如果你想前/後多條線路,創建prevLines「滾動」陣列和一個while循環存儲使用更多的ReadLine調用數組中postLines。

0
 using (StreamReader _streamReader = new StreamReader("file.tmp")) 
     { 
      string[] returnValue; 

      string previousLine = null; 
      string line = _streamReader.ReadLine(); 
      while (line.instr() < 0) 
      { 
       previousLine = line; 
       line = _streamReader.ReadLine(); 
      } 

      string[] returnValue = new string[] { 
       previousLine, 
       line, 
       _streamReader.ReadLine() 
      }; 

     } 
相關問題