[C#] テキストファイルを検索しながら効率的に読み込む File.ReadLines メソッド

.NET Framework 4 から追加された System.IO.File.ReadLines メソッド は巨大なファイルの読み込みにも対応した便利なメソッドだ。
サンプル・テキストファイル (d:\test_utf8.txt)
Michael Williams
Christopher White
John Taylor
Robert Smith
James Jones
Charles Johnson
Daniel Thomas
Mark Wilson
John Williams
William Thomas
Christopher Jackson
William Thomas
Charles Thomas
Michael Smith
Thomas Jones
Richard Taylor
Michael Johnson
Mark Smith
Michael Miller
Paul Wilson
using System.IO;

 foreach (var line in File.ReadLines(@"d:\test_utf8.txt").Where(line => line.Contains("Taylor")))
 {
  Console.WriteLine(line);
 }

 // 出力
 // John Taylor
 // Richard Taylor

テキストファイルを読み込みつつ、"Taylor" が含まれる行を検索して列挙している。これが一行で完結してしまうのだからすごい。
ただ、一つだけ注意しなければいけないことは、テキストファイルのエンコードである。
UTF-8 の場合はそのまま読み込むことができるのだが、日本語が含まれた Shift-JIS などのエンコード形式のファイルは文字化けする。
その場合は、エンコード形式を指定する必要がある。

サンプル・テキストファイル (d:\test.txt)
いちろう やまだ
じろう すずき
たろう やまだ
しろう やまおか
ごろう やまもと
using System.IO;

 foreach (var line in File.ReadLines(@"d:\test.txt", Encoding.GetEncoding("Shift_JIS")).Where(line => line.Contains("やまだ")))
 {
  Console.WriteLine(line);
 }

 // 出力
 // いちろう やまだ
 // たろう やまだ
エンコードは注意。

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック