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