groovy 逐行比较两个CSV文件,并打印缺失的ID

qzlgjiam  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(146)

第一个
需要在CSV1(ID)和CSV2(ID)的基础上比较CSV1和CSV2,并打印缺失的行。ID中的所有值都已排序。我需要根据CSV1中缺失的ID获得缺失的UUID。我是Java新手,试图解决这个问题,但发现很困难。感谢任何帮助。
编辑:根据其他开发人员的评论,我尝试了以下方法,仍然很粗糙,想知道我可以做的改进

BufferedReader br = new BufferedReader(new FileReader("/Users/IdeaProjects/extract/csv1.csv"));
def line =  null;
HashMap<String,String> map = new HashMap<String, String>();

while((line=br.readLine())!=null){
    def str = line.split(",");
    for(int i=0;i<str.length;i++){
     //   def arr = str[i].split(",");
        map.put(str[1], str[0]);
    }
}
//System.out.println(map);

BufferedReader br2 = new BufferedReader(new FileReader("/Users/IdeaProjects/extract/csv2.csv"));

while((line2=br2.readLine())!=null){
    def str2 = line2.split(",");
    for(int i=0;i<str2.length;i++){
        //   def arr = str[i].split(",");
        map.remove(str2[0])
    }
}
iswrvxsc

iswrvxsc1#

有很多方法可以解决你的问题。我将解释我会做的方式,它是安静的简单,不需要“很多”的知识。
所以首先你应该把两个CSV文件都读入Java并存储在某个地方。我推荐使用ArrayList。它很容易使用,而且根据你的数据大小,数据结构真的不重要。
因此阅读CSV文件可能如下所示:

ArrayList<String> ids = new ArrayList<String>();

try {
    BufferedReader reader = new BufferedReader(new FileReader(filePath));

    String line = "";
    while((line = reader.readLine()) != null) {
        ids.add(line)
    }
} 
catch (Exception e) {
    System.err.println("The given input file does not exist, probably wrong  file path!");
}

在将两个.csv文件读入两个不同的ArrayList之后,将它们都存储起来,并编写另一个方法,如“findMissingIDs()"。
在这个方法中,你应该取一个ArrayList,它存储了所有现有的ID,遍历它并调用ArrayList.contains(ArrayList.get(i))。调用.contains()的ArrayList应该是一个ArrayList,它不包含所有的ID,而调用.get()的ArrayList应该是一个包含所有ID的ArrayList
总而言之,它可能看起来像这样:

public void findMissingIDs() {
    ArrayList<String> allIDs = new ArrayList<>();
    ArrayList<String> toCompare = new ArrayList<>();

    for (int i = 0; i < allIDs.size(); i++) {
        boolean contains = false;

        if (toCompare.contains(allIDs.get(i))) {
            contains = true;
        }
        else {
            contains = false;
        }

        // DO SOMETHING BASED ON "contains".
    }
}

当然,这两个ArrayList应该由保存.csv文件中信息的ArrayList替换

相关问题