2014-12-15 2 views
0

Я пытаюсь прочитать CSV-файл, используя библиотеку OpenCsv. Теперь я встречая следующую задачу:Получить значения из столбца файла csv

У меня есть этот файл CSV

C1;C2;C3;C4  Header 
A11;A12;A13;A14 Body 
A21;A22;A23;A24 
A31;A32;A33;A34 
...;...;...;... 
...;...;...;... 

Теперь я хотел бы получить все значения (без дубликатов) из колонны С2, например. Подводя итоги, я хочу найти способ сделать getValues ​​(«C3»), и я хочу получить A13, A23; a33. Может ли openCsv помочь мне? Есть ли другой способ сделать это?

ответ

0

я полагаю

1 является идентификатор 2 является цена 3 является именем пользователя ....

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.StringTokenizer; 

public class ReadFile { 

    public static void main(String[] args) { 

    BufferedReader br = null; 

    try { 

     String line; 

     br = new BufferedReader(new FileReader("c:/test.csv")); 
    int i=0; 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 

      StringTokenizer stringTokenizer = new StringTokenizer(line, ";"); 
if(i==0) 
    { 
    i++; 
    continue; // skip headers 
    } 
      while (stringTokenizer.hasMoreElements()) { 



      Integer id = Integer.parseInt(stringTokenizer.nextElement().toString()); 
      Double price = Double.parseDouble(stringTokenizer.nextElement().toString()); 
      String username = stringTokenizer.nextElement().toString(); 

      StringBuilder sb = new StringBuilder(); 
      sb.append("\nId : " + id); 
      sb.append("\nPrice : " + price); 
      sb.append("\nUsername : " + username); 
      sb.append("\n*******************\n"); 

      System.out.println(sb.toString()); 
      } 
     } 

     System.out.println("Done"); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (br != null) 
       br.close(); 

     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    } 
} 
0

Есть еще один способ сделать это?

Вы можете использовать CSVParser от Apache Commons и во время итерации каждой записи добавить значение в set. В конце вы получите все уникальные значения в наборе. Например.

Set<String> uniqueValues = new HashSet<>(); 
File csvData = new File("/path/to/csv"); 
CSVParser parser = CSVParser.parse(csvData, CSVFormat.RFC4180); 
for (CSVRecord csvRecord : parser) { 
    uniqueValues.add(csvRecord.get(2)) 
} 
Смежные вопросы