Как перебрать каждую строку из TextReader?

Возможный дубликат:
C# Чтение файла построчно
Как зациклить строки из TextReader?

Мне дали.NET TextReader (класс, который может читать последовательные серии символов). Как я могу перебрать его содержимое построчно?

4 ответа

Решение

Вы имеете в виду что-то подобное?

string line = null;
while((line = reader.ReadLine()) != null) 
{
    // do something with line
}

Вы можете создать метод расширения очень легко, чтобы вы могли использовать foreach:

public static IEnumerable<string> ReadLines(this TextReader reader)
{
    string line = null;
    while((line = reader.ReadLine()) != null) 
    {
        yield return line;
    }
}

Обратите внимание, что это не закроет читателя для вас в конце.

Затем вы можете использовать:

foreach (string line in reader.ReadLines())

РЕДАКТИРОВАТЬ: Как отмечено в комментариях, это ленивый. Он будет читать только строки за раз, а не читать все строки в память.

Не ленивое решение, которое я имею на данный момент:

foreach(string line in source.ReadToEnd().Split(Environment.NewLine.ToArray(),StringSplitOptions.None))

Вы бы использовали это так:

string line;
while ((line = myTextReader.ReadLine()) != null)
{
    //do whatever with "line";
}

ИЛИ ЖЕ

string Myfile = @"C:\MyDocument.txt";
using(FileStream fs = new FileStream(Myfile, FileMode.Open, FileAccess.Read))
{                    
    using(StreamReader sr = new StreamReader(fs))
    {
        while(!sr.EndOfStream)
        {
            Console.WriteLine(sr.ReadLine());
        }
    }
}
Другие вопросы по тегам