【问题标题】:Get values from a column of a csv file从 csv 文件的列中获取值
【发布时间】:2014-12-15 11:23:41
【问题描述】:

我正在尝试使用 OpenCsv 库读取 .csv 文件。现在我遇到了以下问题:

我有这个 csv 文件

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

例如,现在我想从 C2 列获取所有值(不重复)。总结一下,我想找到一种方法来做 getValues("C3") 并且我想得到 A13,A23;a33。 openCsv 可以帮助我吗? 还有其他方法吗?

【问题讨论】:

    标签: java csv opencsv


    【解决方案1】:

    我想

    1 是 id 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();
            }
        }
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      还有其他方法吗?

      您可以使用来自 apache commons 的 CSVParser,并在每条记录的迭代期间将值添加到 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))
       }
      

      【讨论】:

        猜你喜欢
        • 2020-09-16
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多