2010-08-30 46 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() 
      }; 

     } 
相关问题