Grepっぽい何か
30分プログラム、その559。Grepっぽい何かを作ってみよう。
MapReduceといえばwcだけどgrepもおもしろいんじゃないかな、と思ったので、とりあえず直列なやつを作ってみた。
とりあえず正規表現の使い方が分っただけで満足です。
使い方
1> grep:start("Io","grep.erl"). get_lines(Io) -> case io:get_line(Io,"") of [S| get_lines(Io)] {ok,Io} = file:open(Path,[read]), lists:foreach(fun(S) -> io:format("~s",[S]) end,grep(Regexp,get_lines(Io))).
ソースコード
-module(grep). -compile([export_all]). grep(Regexp,Lines) -> lists:filter(fun (Line) -> case regexp:match(Line,Regexp) of {match,_,_} -> true; _ -> false end end,Lines). get_lines(Io) -> case io:get_line(Io,"") of eof -> []; S -> [S| get_lines(Io)] end. start(Regexp,Path) -> {ok,Io} = file:open(Path,[read]), lists:foreach(fun(S) -> io:format("~s",[S]) end,grep(Regexp,get_lines(Io))).