0

2 つの csv ファイルをループしてそれらの列を比較する最も適切な方法は何だろうと思っていました。具体的には、csv file1 の 1 番目の列を csv file2 の列 20 のすべての反復と比較し、一致するかどうかを確認したいと考えています。これが私がこれまでに持っているものです。さらに、csv file1 は csv file2 よりかなり小さいです。

public class ClassifyData {

public static void main(String[]args) throws IOException{

File file1 = new File("file1.csv");

File file2 = new File("file2.csv");
FileWriter writer = new FileWriter("/Users/home/Work.csv");
PrintWriter pw = new PrintWriter(writer);
Scanner in = new Scanner(file1);
Scanner in2 = new Scanner(file2);
boolean firstLine = true;
String[] temp = null;
String [] temp2 = null;
String line = null;
String line2 = null;

while((line = in.nextLine())!=null){

    temp= line.split(",");  
while(line2 = in2.nextLine() !=null){
    temp2 = line2.split(",");


    if(temp[0] == temp[20]){
        System.out.println("match");
        pw.append("0");
        continue;

    }




    pw.append("\n");

    }
}

pw.flush();
pw.close();
writer.close();

}

    }
4

2 に答える 2

1

if(temp[0] == temp[20])では、おそらく意味しif(temp[0].equals(temp2[20]))ます。これにより、必要な比較が得られます。ただし、内部whileループは、必要に応じて 2 番目のファイルの先頭からやり直すことはできません。オブジェクトがファイルを最初からやり直すことはできないと思いScannerます。たとえできたとしても、同じファイルを何度も読み取ることで、多くのファイル読み取りを無駄にすることになります。このようなものは、ディスクにとってより効率的です。

ArrayList<String> list1 = new ArrayList<String>;
while((line = in.nextLine())!=null){
    temp= line.split(",");  
    list1.add(temp[0]);
}
// ...
for(int i = 0; i < list1.size(); i++){
    for(int j = 0; j < list2.size(); j++){
        if(list1.get(i).equals(list2.get(j))){
            System.out.println("Match found");
        }
    }
}

警告: テストされていないコード

于 2012-05-27T22:19:20.503 に答える
0

両方のファイルを一度だけ通過するため、ソリューションが機能するとは思いません(両方のファイルを同時に順次インクリメントしています)。最初のファイルが小さいことを考えると、そのファイルを一度完全に調べて、ハッシュテーブルの最初の列に値を格納することをお勧めします。次に、2 番目のファイルを循環し、20 列目の値がハッシュ テーブルに表示されるかどうかを確認します。

于 2012-05-27T22:13:32.083 に答える