java - CSV 到 CSV 比较实用程序
问题描述
我正在做一个项目,我需要比较 2 个 CSV 是否相等。它只是每个 CSV 中的一行,具有多列,并以不同的列名称和值的形式报告差异。例如:
CSV 1 :
Name Roll No Dept
Brij 1 IT
CSV 2 :
Name Roll No Dept
Brij 2 IT
I need to report the diff as
Roll No 1 does not match Roll No 2 i.e. Col name and value in both csvs
My work till now :
@Test
public void f() {
try {
FileReader reader1 = new FileReader(
new File(System.getProperty("user.dir") + "\\src\\test\\resources\\csvFile\\Reader.csv"));
FileReader reader2 = new FileReader(
new File(System.getProperty("user.dir") + "\\src\\test\\resources\\csvFile\\Reader - Copy.csv"));
CSVReader csvReader1 = new CSVReader(reader1);
CSVReader csvReader2 = new CSVReader(reader2);
String[] nextRecordReader1;
String[] nextRecordReader2;
// we are going to read data line by line
while ((nextRecordReader1 = csvReader1.readNext()) != null
&& (nextRecordReader2 = csvReader2.readNext()) != null) {
checkEquality(nextRecordReader1, nextRecordReader2);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void checkEquality(String[] s1, String[] s2) {
if (s1 == s2) {}
if (s1 == null || s2 == null) {}
int n = s1.length;
if (n != s2.length) {}
for (int i = 0; i < n; i++) {
if (!s1[i].trim().equals(s2[i].trim())) {
System.out.println(s1[i] + " is not equal to " + s2[i]);
}
}
}
这给了我以下结果:1 不等于 2
我无法提及列名。我该怎么做?
解决方案
public void checkEquality(String[] s1, String[] s2) {
if (s1 == s2) {}
if (s1 == null || s2 == null) {}
String[] headers= new String[]{"Name","Roll No","Dept"};
int n = s1.length;
if (n != s2.length) {}
for (int i = 0; i < n; i++) {
if (!s1[i].trim().equals(s2[i].trim())) {
System.out.println(headers[i]+" "+s1[i] + " is not equal to " headers[i]+" "+ s2[i]);
}
}
}
您需要一个集合来保存列标题,并使用此集合来获取基于索引的标题。
推荐阅读
- php - get_the_category 生成错误:Call to undefined function __() in taxonomy.php
- python - 如何使用 Python3 通过单击网页中的按钮来安排 pdf 的下载
- sql - 如何排除结果中的负值
- javascript - 运行 ng serve (Angular 8)时,任何人都可以帮助我理解 cmd 中的这条消息吗?
- kubernetes - Kubernetes 服务部署在默认命名空间而不是使用 Helm 定义的命名空间
- c# - 即使在设置超时并且程序等待设置的持续时间之后,WebRequest.GetResponse() 也会引发超时异常
- c# - 一次只允许一个用户访问操作
- javascript - 为什么 React 会跳过正确设置为 state 的最后一个问题?
- javascript - 如何在reactjs中按日期排列图像?
- jquery - Json 序列化不是使用 Jquery 序列化一些 html 数据