TextReader から各行をループするにはどうすればよいですか?[重複]

StackOverflow https://stackoverflow.com//questions/12688245

  •  12-12-2019
  •  | 
  •  

質問

重複の可能性:
C# ファイルを 1 行ずつ読み取る
TextReader からの行をループするにはどうすればよいですか?

.NET を与えられました テキストリーダー (連続した一連の文字を読み取ることができるクラス)。そのコンテンツを行ごとにループするにはどうすればよいですか?

役に立ちましたか?

解決

このようなことを意味しますか?

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())

編集:コメントで指摘されているように、これは怠惰です。すべての行をメモリに読み取るのではなく、一度に 1 行だけを読み取ります。

現時点で私が持っている遅延のない解決策は次のとおりです。

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());
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top