File Erlang文件差异
我需要得到2个文件的差异。例如:File Erlang文件差异,file,erlang,diff,File,Erlang,Diff,我需要得到2个文件的差异。例如: File 1: asd qwe File 2: asd qwe zxc 我需要代码中的行zxc。如何使用erlang?我将通过以下方式处理此问题: -module(main). -export([main/0]). read_all(F) -> R = file:read_line(F), read_all(F, R, []). read_all(F, {ok, Data}, A) -> R = file:re
File 1:
asd
qwe
File 2:
asd
qwe
zxc
我需要代码中的行
zxc
。如何使用erlang?我将通过以下方式处理此问题:
-module(main).
-export([main/0]).
read_all(F) ->
R = file:read_line(F),
read_all(F, R, []).
read_all(F, {ok, Data}, A) ->
R = file:read_line(F),
read_all(F, R, A ++ [Data]);
read_all(_, eof, A) ->
A.
main() ->
{ok, F1} = file:open("file1", [raw, read_ahead]),
F1Data = read_all(F1),
{ok, F2} = file:open("file2", [raw, read_ahead]),
F2Data = read_all(F2),
S1 = sets:from_list(F1Data),
S2 = sets:from_list(F2Data),
io:format("~p ~p~n", [S1, S2]),
sets:subtract(S2, S1).
您可能需要以更易于阅读的格式显示set操作的结果(sets:subtract,在本例中为),从而对其进行润色。这样如何
1> {ok,Bin}=file:read_file("1.txt").
{ok,<<"asd\nqwe\n">>}
2> {ok,Bin2}=file:read_file("2.txt").
{ok,<<"asd\nqwe\nzxc\n">>}
3> L1=binary:split(Bin, <<"\n">>, [global]).
[<<"asd">>,<<"qwe">>,<<>>]
4> L2=binary:split(Bin2, <<"\n">>, [global]).
[<<"asd">>,<<"qwe">>,<<"zxc">>,<<>>]
5> L2 -- L1.
[<<"zxc">>]
1>{ok,Bin}=file:read_file(“1.txt”)。
{好的,}
2> {ok,Bin2}=file:read_file(“2.txt”)。
{好的,}
3> L1=二进制:拆分(Bin,[全局])。
[,,]
4> L2=二进制:拆分(Bin2,[全局])。
[,,,]
5> L2--L1。
[]
但是如果你想要第一个文件中的其他差异,你也必须做L1--L2。文件是按行排序的吗?这是一个文件,但随着时间的推移,它可能会改变(添加行)。你可能想计算每个文件的MD5,如果输出相同,那么不用费心去寻找差异。但是文件在主要情况下是不同的!