Add tags

Add tags to the following comment
実行方法:
$ cat hoge.txt
ID	Surname	Forename	Age
1	Sato	Hanako	17
0	Suzuki	Taro	18

$ erlc doukaku7723.erl
$ erl -noshell -s doukaku7723 main hoge.txt -s init stop
ID	Forename	Surname	Age
0	Taro	Suzuki	19
1	Hanako	Sato	18
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
-module(doukaku7723).
-export([main/1]).

main(Filename) ->
    {ok, Bin} = file:read_file(Filename),
    A1 = string:tokens(binary_to_list(Bin), "\r\n"),
    [H | T] = lists:map(curry(flip(fun string:tokens/2), "\t"), A1),
    A2 = lists:map(fun swap23inc4/1, T),
    A3 = lists:sort(fun([E1|_], [E2|_]) -> list_to_integer(E1) < list_to_integer(E2) end, A2),
    A4 = lists:map(func_comp(fun lists:concat/1, curry(fun intersperse/2, "\t")), [swap23(H) | A3]),
    A5 = lists:concat(intersperse("\r\n", A4)),
    io:format("~s~n", [A5]).

swap23([A,B,C,D | Rest]) -> [A,C,B,D|Rest].
swap23inc4([A,B,C,D | Rest]) -> [A,C,B,integer_to_list(1+list_to_integer(D)) | Rest].

intersperse(_, []) -> [];
intersperse(_, [X]) -> [X];
intersperse(Sep, [X | XS]) -> [X, Sep | intersperse(Sep, XS)].
curry(F, A) -> fun(B) -> F(A, B) end.
flip(F) -> fun(A, B) -> F(B, A) end.
func_comp(F, G) -> fun(X) -> F(G(X)) end.

Add tags

The input will be splited to tags with space.

Index

Feed

Other

Link

Pathtraq

loading...