2014年08月27日

C#で条件を満たす行を取り除く

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その36

久しぶりに、"http://ja.doukaku.org/" にアクセスしたら、Not found になっていました。完全に閉鎖されてしまったようですね。
でも気にせず、このシリーズは続けます(^^;;

■問題 (出題者:にしお さん)
ファイルから1行ずつ読み込み、"#"で始まる行だけを取り除いてファイルに出力するコードを書いてください。
サンプル入力
hello!
# remove this
# don't remove this
bye!

サンプル出力
hello!
# don't remove this
bye!

#"で始まる行だけを取り除くプログラムだとつまらないので、タイトルどおりに「条件を満たす行を取り除くメソッド」を書いてみた。。
つまり条件を引き数として渡せるようにしてみた。

using System;
using System.IO;


namespace Doukaku.Org {
    class Program {
        static void Main(string[] args) {
            RemoveLines("sample.txt", "sampleOut.txt", s => s.StartsWith("#"));
        }       
        private static void RemoveLines(string infile, string outfile, Predicate<string> judge) {
            using (StreamReader sr = new StreamReader(infile))
            using (StreamWriter sw = new StreamWriter(outfile)) {
                while (!sr.EndOfStream) {
                    string s = sr.ReadLine();
                    if (!judge(s))
                        sw.WriteLine(s);
                }
            }
        }
    }
}

この例では、引き数として

  s => s.StartsWith("#")

を渡しているが、

  s => s.Length == 0

とすれば、長さが 0 の行を取り除くことができる。



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52380677