commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Emmanuel Bourg (Created) (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CSV-65) Header support
Date Thu, 15 Mar 2012 00:40:39 GMT
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


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