commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sebb (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CSV-65) Header support
Date Thu, 15 Mar 2012 13:17:39 GMT

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

Sebb commented on CSV-65:
-------------------------

bq. I preferred a null array to save some memory.

The empty string array is immutable and can be safely shared.

Using null increases the code because have to check for null.
                
> 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