2011-12-17 4 views
-1

У меня есть два файла csv с несколькими столбцами из нескольких таблиц. Я использую opencsv для создания csv-файлов. Я хочу сделать один файл csv, содержащий все столбцы из обоих файлов. В обоих файлах есть один общий столбец. Но количество записей не одинаково. Пожалуйста, предложите что-нибудь. Любая помощь будет оценена по достоинству.Присоединяйтесь к двум файлам csv в одном из java

P.S .: Объединение двух файлов просто означает, что я хочу добавить все столбцы в один файл. Это не соединение с базой данных. Я хочу объединенный файл csv и использовать его в каком-нибудь инструменте для создания pdf

+0

Если они не имеют одни и те же столбцы и рассчитывает разные линии, * * как ** вы собираетесь их объединить? В чем тут логика? Каким будет выходной файл? –

+0

* «Пожалуйста, предложите что-нибудь». * Не похоже, что это данные, подходящие для CSV. Найдите другую структуру хранения. –

+0

Я просто хочу, чтобы все столбцы в одном CSV-файле и далее использовали этот файл csv. Это проблема, с которой я столкнулся, поскольку таблицы не связаны – Shaireen

ответ

3

Загрузите один файл в словарь, на который ссылается общее значение столбца, затем добавьте все записи второго файла в соответствующую запись в словарь (опять же по общему значению столбца).
Наконец, напишите все слова k, v pairs в новый файл.

импровизированный пример:

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 
    }