c # streamreader textfiles читает строку до / после - PullRequest
1 голос
/ 30 августа 2010

В некоторых особых случаях мне нужно несколько строк до и после текущей позиции.Например,

public 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 строки - это то, что мне нужно.

Есть ли простой способ сделать это?

Ответы [ 3 ]

0 голосов
/ 30 августа 2010

Вы можете сохранить копию предыдущей строки в цикле, а затем использовать дополнительный 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 для хранения postLines в массиве, используя больше вызовов ReadLine.

0 голосов
/ 30 августа 2010
        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() 
            };

        }
0 голосов
/ 30 августа 2010

Если ваш файл не слишком большой, вы можете просто прочитать весь файл и сохранить каждую строку в List<String>, а затем взять последние три строки. Если ваш файл действительно большой, используйте класс Queue - поместите строки в очередь и вызовите TrimToSize, чтобы сохранить количество необходимых строк. Конечно, чтобы получить «строку после», вам нужно прочитать еще одну строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...