比较数组与文本文件

时间:2018-12-05 02:24:03

标签: java csv

我有一个文本文件:“ example.csv”,其中包含1000行
文本文件包含

Dog, 3123
Cat, 6544
Chicken, 8943

还有另一个:“ example2.csv”,其中包含1000行

Fruit, 3243
Banana, 9432
Chicken, 2043

以及一个包含(100行)的数组:

Home, Dan, Dog, 4234
Home, Bug, Chicken, 3213
Home, Hds, Banana, 4324
Out, Bgh, Poodle, 3129

我需要将数组中的第三列更改为CSV中的值example.csv。如果在第一个中找不到,则需要在第二个中查找example2.csv。

如您在我的示例中看到的,Chicken都出现在两者中,但是它需要从example.csv中查找值。但是,Fruit仅出现在第二个位置,因此需要从example2.csv中找到该值。

在任何一个csv中都找不到的任何内容都需要显示它不存在。

任何例子都是

Home, Dan, Dog, 4234
Home, Bug, Chicken, 3213
Out, Bgh, Poodle, 3129

成为

Home, Dan, 3123, 4234
Home, Bug, 8943, 3213
Home, Hds, 9432, 4324
Out, Bgh, Poodle, 3129 : Display :Missing - Poodle

谢谢!

Number是数组,isFound开始为false 分隔为:“,”

这是我的尝试:

try {
    //Scanner inFile = new Scanner (new FileReader("Files\\"+"ABTutor2018Sem2"+".csv")); // import file
    brStudents = new BufferedReader(new FileReader("Files\\deploystudio.csv"));
    brStudents2 = new BufferedReader(new FileReader("Files\\deploystudio2.csv"));
    while ((line = brStudents.readLine()) != null) {
        arrSubjectsDeploy = line.split(splitBy);                      
        isFound = false;
        for(int h = 0; h < l; h++) {
            arrSubjects = Number[h].split(splitBy);
            line2 = "";
            errorMessage = arrSubjectsDeploy[0]; 
            if(arrSubjects[2].equals(arrSubjectsDeploy[0])) {
                arrSubjects[2] = arrSubjectsDeploy[1];  
                m++;
                tempHolder = "";
                isFound = true;
            }
            if(h == l-1 && isFound == false) {
                System.out.println("Missing: " + errorMessage);
            } 
        }
    }
}

这只是试图做第一个文本文件...但是仍然无法正常工作,因为它正在查看文本文件的内容并查看它是否与数组进行比较,反之亦然。

1 个答案:

答案 0 :(得分:0)

您可以使用Map<String,String>存储example.csvexample2.csv的内容。然后遍历您的输入数组以检查它是否存在于任何一个文件中。

Map<String, String> firstFile = readFileAndConvert("Files\\deploystudio.csv");
Map<String, String> secondFile = readFileAndConvert("Files\\deploystudio2.csv");
int index = 2;
String[][] finalArray =
    {{"Home", "Dan", "Dog", "4234"}, {"Home", "Bug", "Chicken", "3213"},
        {"Home", " Hds", "Banana", "4324"}, {"Out", " Bgh", "Poodle", "3129"}};
for(String[] row : finalArray) {
  String valueToFind = row[index];
  if(firstFile.containsKey(valueToFind)) {
    row[index] = firstFile.get(valueToFind);
  } else if(secondFile.containsKey(valueToFind)) {
    row[index] = secondFile.get(valueToFind);
  } else {
    System.out.println("Missing " + valueToFind);
  }
}
使用Java 8的

readFileAndConvert函数。但是您也可以在任何其他版本中实现类似的功能。

private Map<String, String> readFileAndConvert(String path) throws IOException {
    String SEPARATOR = ",";
    try (Stream<String> lines = Files.lines(Paths.get(path))) {
      return lines.map(line -> line.split(SEPARATOR))
      .collect(Collectors.toMap(array -> array[0], array -> array[1]));
    }
}