2011-12-17 130 views
-1

我有兩個csv文件,包含多個表中的多個列。我使用opencsv生成csv文件。 我想製作一個包含兩個文件中所有列的csv文件。 這兩個文件中都有一個共同的列。 但記錄數量不相同。 請提出建議。任何幫助,將不勝感激。在java中將兩個csv文件合併爲一個

P.S .:連接兩個文件只是意味着我想添加一個文件中的所有列..這不是數據庫連接。 我想要組合的csv文件,並將其用於某些工具中以生成pdf

+0

如果它們不具有相同的列和不同的線數,* *你將如何合併它們?這裏的邏輯是什麼?輸出文件是什麼? –

+0

*「請提出建議。」*聽起來不像是適合CSV的數據。找到另一個存儲結構。 –

+0

我只想在一個CSV文件中的所有列,並進一步使用這個CSV文件..這是我面臨的挑戰,因爲表是不相關的 – Shaireen

回答

3

將一個文件加載到由公用列值鍵入的字典中,然後將第二個文件的所有記錄附加到字典(再次按公共列值)。
最後,將所有字典k,v對寫入一個新文件。

即興例如:

CSVReader r1 = ...; // reader of 1st file 
CSVReader r2 = ...; // reader of 2nd file 

HashMap<String,String[]> dic = new HashMap<String,String[]>(); 

int commonCol = 1; // index of the commonColumn 

r1.readNext(); // skip header 
String[] line = null; 
while ((line = r1.readNext()) != null) 
{ 
    dic.add(line[commonCol],line) 
} 

commonCol = 2; // index of the commonColumn in the 2nd file 

r2.readNext(); // skip header 
String[] line = null; 
while ((line = r2.readNext()) != null) 
{ 
    if (dic.keySet().contains(line[commonCol]) 
    { 
    // append line to existing entry 
    } 
    else 
    { 
    // create a new entry and pre-pend it with default values 
    // for the columns of file1 
    } 
} 

foreach (String[] line : dic.valueSet()) 
{ 
    // write line to the output file. 
} 
+0

你可以提供一些相同的代碼片段..? – Shaireen

+0

我已經添加了一個基本的不完整(!)示例,它應該如何顯示,並嘗試調整它。 – yurib

0

我們可以做這樣的事情,如果我們知道哪些列具有重複數據

int n1,n2;//stores the serial number of the column that has the duplicate data 
    BufferedReader br1=new BufferedReader(new InputStreamReader(new FileInputStream(f1))); 
    BufferedReader br2=new BufferedReader(new InputStreamReader(new FileInputStream(f2))); 
    String line1,line2; 
    while((line1=br1.readLine())!=null && (line2=br2.readLine())!=null){ 
     String line=line1+","+line2; 
     String newL=""; 
     StringTokenizer st=new StringTokenizer(line,","); 
     for(int i=1;i<=st.countTokens();i++){ 
      if((i==n1)||(i==n1+n2)) 
       continue; 
      else 
       newL=newL+","+st.nextToken(); 
     } 
     String l=newL.substring(1); 
     //write this line to the output file 
    } 
相關問題