判断两个 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 脚本
英文版