commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Emmanuel Bourg (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CSV-65) Header support
Date Fri, 16 Mar 2012 22:56:39 GMT

    [ https://issues.apache.org/jira/browse/CSV-65?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13231716#comment-13231716
] 

Emmanuel Bourg commented on CSV-65:
-----------------------------------

I found an issue with the initialization in the constructor, it forces the constructor to
declare IOException. If we can avoid adding a checked exception that would be nice. On the
other hand the parser is probably created right after a FileReader, so the exception has to
be handled already.

                
> Header support
> --------------
>
>                 Key: CSV-65
>                 URL: https://issues.apache.org/jira/browse/CSV-65
>             Project: Commons CSV
>          Issue Type: New Feature
>          Components: Parser
>            Reporter: Emmanuel Bourg
>             Fix For: 1.0
>
>         Attachments: CSVFormat.java, CSVParser.java, CSVRecord.java
>
>
> 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:
> {code:java}
> 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);
> }
> {code}
> The header should be defined in the format with something like this:
> {code:java}
> CSVFormat format = CSVFormat.DEFAULT.withHeader();
> {code}
> Then either the parser provides the column name to index mapping automatically:
> {code:java}
> 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);
> } 
> {code}
> or the parser returns a Map like structure similar to a JDBC ResultSet (replacing String[]):
> {code:java}
> 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);
> } 
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message