LINQ を使用した C# でのファイルの 1 行ずつの読み取り
テキスト ファイルを操作する場合、多くの場合、各行を個別に処理する必要があります。 C# には、StreamReader の使用や各行の手動読み取りなど、これを実現するいくつかの方法が用意されています。
ただし、効率と読みやすさを向上させるために、パフォーマンスを犠牲にすることなく LINQ (Language INtegrated Query) を利用できます。 LINQ は、データを操作するためのより簡潔で表現力豊かな構文を提供します。
行ごとの読み取りが必要な 2 つのシナリオ例を考えてみましょう:
最初の例:
using (var file = System.IO.File.OpenText(_LstFilename)) { while (!file.EndOfStream) { String line = file.ReadLine(); // Process line } }
2 番目例:
using (var file = System.IO.File.OpenText(datFile)) { Regex nameRegex = new Regex("IDENTIFY (.*)"); while (!file.EndOfStream) { String line = file.ReadLine(); // Process line } }
LINQ ベースのアプローチ:
LINQ でファイルを 1 行ずつ読み取るには、反復子ブロックを使用してカスタム列挙可能シーケンス:
static IEnumerable<string> ReadFrom(string file) { string line; using (var reader = File.OpenText(file)) { while ((line = reader.ReadLine()) != null) { yield return line; } } }
このメソッドは、遅延して実行される IEnumerable オブジェクトを返します。ファイル全体をメモリにバッファリングすることなく、要求されたとおりに各行を評価します。
その後、LINQ クエリを使用して行を処理できます。
var lines = ReadFrom(path); // Process lines using LINQ
LINQ を使用すると、フィルタリングを適用できます。行シーケンスに対する順序付けやその他の操作により、コードがより効率的で読みやすくなります。 OrderBy や GroupBy などの操作が使用される場合、LINQ はデータをバッファーする必要があり、パフォーマンスに影響を与える可能性があることに注意してください。
以上がLINQ は C# でのファイルの 1 行ずつの読み取りをどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。