2016-05-18 20 views
-1

これは私がしようとしているのは、OracleのSQLテーブルのバックアップファイルを作ることです。私はtable_bkup.csvファイルを作成するためにopencsv.jarを使用しました。Javaを使用して2つのcsvファイルを比較するにはどうすればよいですか?

私は、その後、Oracleデータベース上の現在のテーブルに、バックアップファイル内の3列を比較することになっています。

私はtable_current.csvファイルとして別のCSVを作成することに決めました。

私は今、3列が増加または減少しているかどうかを確認するために、2つのCSVファイルを比較したいです。テーブルには58行のデータ列と20列があります。

ここで、3つの列の値は、常にバックアップまたは値の増加と等しいとみなされます。 問題が発生し、値が減少すると、スーパーバイザーに電子メールを送信する必要があります。

どうすればよいですか? は、 マイケルB.

P.S.をありがとう私はJavaプログラミングにかなり新しいです、そして、どんな助けも高く評価されるでしょう!私はこれまでに、すべての研究や私が持っているものを達成する方法を学ぶことを含めて、このプロジェクトに約11時間を費やしました。

+0

Javaのチュートリアルを始めると思いますか?テキスト(CSV)ファイルを読み込み、その値を解析し、それらの値を比較し、電子メールを送信したいと考えています。オンラインの例がすべてあります。 – David

答えて

-1

これは永遠に行われましたが、それはうまく動作します! 最終結果:

try{ 
     CSVReader reader = new CSVReader(new FileReader("b2b_control_number_bkup.csv")); 
     String [] nextLine; 

     int counter = 0; 

     // First File Variables 
     String SENDER_NAME = null; 
     String RECEIVER_NAME = null; 
     String DOC_PROTOCOL_NAME = null; 
     String DIRECTION = null; 
     String NAME = null; 
     String IS_DEFAULT = null; 
     /* 
     String INTERCHANGE = null; 
     String GROUP_NUM = null; 
     String TRANSACTION_NUM = null; 
     */ 
     int INTERCHANGE = 0; 
     int GROUP_NUM = 0; 
     int TRANSACTION_NUM = 0; 

     //Second File variables 
     String SENDER_NAMEb = null; 
     String RECEIVER_NAMEb = null; 
     String DOC_PROTOCOL_NAMEb = null; 
     String DIRECTIONb = null; 
     String NAMEb = null; 
     String IS_DEFAULTb = null; 
     /* 
     String INTERCHANGEb = null; 
     String GROUP_NUMb = null; 
     String TRANSACTION_NUMb = null; 
     */ 
     int INTERCHANGEb = 0; 
     int GROUP_NUMb = 0; 
     int TRANSACTION_NUMb = 0; 

     while ((nextLine = reader.readNext()) != null) { 
      //System.out.println(nextLine[4] +" "+ nextLine[5] +" "+ nextLine[6]); 
      SENDER_NAME = nextLine[0]; 
      RECEIVER_NAME = nextLine[1]; 
      DOC_PROTOCOL_NAME = nextLine[2]; 
      DIRECTION = nextLine[3]; 

      INTERCHANGE = Integer.parseInt(nextLine[4]); 
      GROUP_NUM = Integer.parseInt(nextLine[5]); 
      TRANSACTION_NUM = Integer.parseInt(nextLine[6]); 

      NAME = nextLine[15]; 
      IS_DEFAULT = nextLine[16]; 


      // nextLine[] is an array of values from the line 

      CSVReader readerb = new CSVReader(new FileReader("b2b_control_number_current.csv")); 
      String [] nextLineb; 

      while ((nextLineb = readerb.readNext()) != null) { 
       SENDER_NAMEb = nextLineb[0]; 
       RECEIVER_NAMEb = nextLineb[1]; 
       DOC_PROTOCOL_NAMEb = nextLineb[2]; 
       DIRECTIONb = nextLineb[3]; 

       INTERCHANGEb = Integer.parseInt(nextLineb[4]); 
       GROUP_NUMb = Integer.parseInt(nextLineb[5]); 
       TRANSACTION_NUMb = Integer.parseInt(nextLineb[6]); 

       NAMEb = nextLineb[15]; 
       IS_DEFAULTb = nextLineb[16]; 


       //System.out.println(nextLineb[4] +" "+ nextLineb[5] +" "+ nextLineb[6]); 
       //System.out.println("RECEIVER_NAMEa: " + RECEIVER_NAME +" "+ RECEIVER_NAMEb); 
       if((SENDER_NAME.equals(SENDER_NAMEb)) 
         && (RECEIVER_NAME.equals(RECEIVER_NAMEb)) 
         && (DOC_PROTOCOL_NAME.equals(DOC_PROTOCOL_NAMEb)) 
         && (DIRECTION.equals(DIRECTIONb)) 
         && (NAME.equals(NAMEb)) 
         && (IS_DEFAULT.equals(IS_DEFAULTb))){ 
        if((INTERCHANGE<=(INTERCHANGEb)) && (GROUP_NUM<=(GROUP_NUMb)) && (TRANSACTION_NUM<=(TRANSACTION_NUMb))){ 
         pw.println("Everything Okay"); 
        }else{ 
         pw.println("Error Send Email"); 
         sendEmail ="1"; 
         } 


        //System.out.println("RECEIVER_NAME: " + RECEIVER_NAME +" "+ RECEIVER_NAMEb); 
        pw.println("INTERCHANGE: " + INTERCHANGE +" "+ INTERCHANGEb + 
          " GROUP_NUM: " + GROUP_NUM +" "+ GROUP_NUMb+ 
          " TRANSACTION_NUM: " + TRANSACTION_NUM +" "+ TRANSACTION_NUMb); 
       } 
      } 
      /* 
       counter ++; 

      if(counter == 2){ 
      break; 
      } 
      */ 
      readerb.close(); 
     } 
     reader.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
1

JavaのSetインターフェイスを使用することですこれを行うための一つの方法。各行を文字列として読み取ってセットに追加し、最初のセットで2番目のセットを使用してremoveAll()を実行して、異なる行を保持します。これはもちろん、ファイルに重複行がないことを前提としています。

// using FileUtils to read in the files. 
HashSet<String> f1 = new HashSet<String>(FileUtils.readLines("file1.csv")); 
HashSet<String> f2 = new HashSet<String>(FileUtils.readLines("file2.csv")); 
f1.removeAll(f2); // f1 now contains only the lines which are not in f2 

PKフィールドがありますか?私はちょうどあなたの文字列からそれを取得する方法を知っていると仮定します。 openCSVや正規表現などを使用してください。上記のようにHashSetの代わりに実際にHashMapとし、PKをキーに、行を値として使用します。

HashMap<String, String> f1 = new HashMap<String, String>(); 
HashMap<String, String> f2 = new HashMap<String, String>(); 
// read f1, f2; use PK field as the key 
List<String> deleted = new ArrayList<String>(); 
List<String> updated = new ArrayList<String>(); 
for(Map.Entry<String, String> entry : f1.keySet()) { 
    if(!f2.containsKey(entry.getKey()) { 
     deleted.add(entry.getValue()); 
    } else { 
     if(!f2.get(entry.getKey().equals(f1.getValue())) { 
      updated.add(f1.getValue()); 
     } 
    } 
} 
for(String key : f1.keySet()) { 
    f2.remove(key); 
} 
// f2 now contains only "new" rows 
関連する問題