Description
Commons CSV is missing some elements to help dealing with CSV file headers.
With the current API one has to write the following code to read the fields by name:
CSVParser parser = new CSVParser(in); Iterator<String[]> it = parser.iterator(); // read the header String[] header = it.next(); // build a name to index mapping Map<String, Integer> mapping = new HashMap<>(); for (int i = 0; i < header.length; i++) { mapping.put(header[i], i); } // parse the records for (String[] record : parser) { Person person = new Person(); person.setName(record[mapping.get("name")]); person.setEmail(record[mapping.get("email")]); person.setPhone(record[mapping.get("phone")]); persons.add(person); }
The header should be defined in the format with something like this:
CSVFormat format = CSVFormat.DEFAULT.withHeader();
Then either the parser provides the column name to index mapping automatically:
CSVFormat format = CSVFormat.DEFAULT.withHeader(); CSVParser parser = new CSVParser(in, format); // parse the records for (String[] record : parser) { Person person = new Person(); person.setName(record[parser.indexOf("name")]); person.setEmail(record[parser.indexOf("email")]); person.setPhone(record[parser.indexOf("phone")]); persons.add(person); }
or the parser returns a Map like structure similar to a JDBC ResultSet (replacing String[]):
CSVFormat format = CSVFormat.DEFAULT.withHeader(); for (CSVRecord record : format.parse(in)) { Person person = new Person(); person.setName(record.get("name")); person.setEmail(record.get("email")); person.setPhone(record.get("phone")); persons.add(person); }
Attachments
Attachments
Issue Links
- supercedes
-
CSV-44 Merging OpenCSV
- Resolved