求和?
有一个类似这样的大文件a 11 23 34 22 34 56
b 23 46 32 64 67 34
c 64 67 34 11 23 34
a 12 33 35 22 39 36
b 21 41 12 61 62 24
c 25 17 14 21 22 14
...
文件的行和列都比较多,
想分类求和,结果如下:
a 23 56 69 44 73 92
b 44 87 44 125 129 58
c 89 84 48 33 45 48
......
请问怎么实现:emn18:
谢谢! 回复 1# patagonia2
没看懂你的求和算法 。。。
回复 2# q1208c
a: 11 + 12 -> 23
23 + 33 -> 56
a 11 23 34 22 34 56
b 23 46 32 64 67 34
c 64 67 34 11 23 34
a 12 33 35 22 39 36
结果如下:
a 23 56 69 44 73 92
b 44 87 44 125 129 58
c 89 84 48 33 45 48
...... 回复 3# patagonia2
如果你的文件不是太大,还好办。
如果文件太大了, 或者行太多了, 很可能内存不够。 需要使用临时文件了。
我已经2年多没写过 erlang 的代码了。 怕是都不记得怎么写了。
回复 4# q1208c 写一个,写一个,写一个{:yxh36:}
回复 5# shijiang1130
你来。:mrgreen:
回复 6# q1208c
想写来着,但不知道怎么匹配 “...”,不但要自己写,还要自己造数据,工程太麻烦
回复 7# shijiang1130
可以先用楼主的数据呀。
够用了。
-module(t).
-compile(export_all).
get_same_seq() ->
{ok, F} = file:open("in.txt", ),
all_line(F).
all_line(F) ->
case io:get_line(F, "") of
eof -> file:close(F);
L ->
Line = binary:replace(L, <<"\n">>, <<>>),
= binary:split(Line, <<" ">>, ),
case ets:lookup(sum, N) of
[{N, Old}] ->
New = ,
%= Old,
%io:format("Old: ~p ~p ~p ~p ~p ~p ~n",),
Add = lists:zipwith(fun (C1, C2) ->
list_to_integer(C1) +
list_to_integer(C2)
end,
New, Old),
Add1 = ,
ets:insert(sum, {N, Add1});
[] ->
Init = ,
ets:insert(sum, {N, Init})
end,
all_line(F)
end.
all_line_1(A1) -> binary_to_list(A1).
all_line_2(_T) -> integer_to_list(_T).
all_line_3(A1) -> binary_to_list(A1).
p() ->
case H of
{N, } ->
io:format("~p: ~p ~p ~p ~p ~p ~p ~n",
);
{<<>>, []} -> skip
end,
p(T);
p([]) -> done.
main() ->
ets:new(sum,
),
get_same_seq(),
Result = ets:tab2list(sum),
p(Result).
100> t:main().
<<"b">>: "396" "783" "396" "1125" "1161" "522"
<<"c">>: "801" "756" "432" "288" "405" "432"
<<"a">>: "207" "504" "621" "396" "657" "828"
页:
[1]
2