判断两个 csv 的内容是否相同
源 csv 和两个目标 csv 的列序可能不同,行序也可能不同:
source.csv |
target1.csv |
target2.csv |
a,b,c 1,2,3 4,5,6 10,11,12 |
a,c,b 1,3,2 10,12,11 4,6,5 |
a,c,b 1,2,3 10,12,11 4,6,5 |
现在要用 Java 判断源 csv 和目标 csv 的内容是否相等,即原本列序不同的的文件,如果调整为相同的列序后,两者以行为成员构成的集合是相等的,则两者内容相等。上面 source.csv 和 target1.csv 内容相等,和 target2.csv 内容不相等。
SPL代码:
A |
B |
|
1 |
=file(arg_source).import@cw() |
=file(arg_target).import@cw() |
2 |
=B1(1).align@p(A1(1)) |
=B1.(~.m(A2)) |
3 |
=A1.eq(B2) |
函数import@cw按逗号分隔符解析文件,读为序列的序列。align按照某序列的顺序对齐另一个序列,返回某序列里的序号。~循环中的当前成员,函数m按序号取值,eq判断两个序列的成员是否相等。
Java 集成 SPL 可参考 Java 如何调用 SPL 脚本
英文版