Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

CSV support for Griffon

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 griffon-app
Octocat-spinner-32 src
Octocat-spinner-32 .gitignore
Octocat-spinner-32 CsvGriffonAddon.java
Octocat-spinner-32 CsvGriffonPlugin.groovy
Octocat-spinner-32 LICENSE.txt
Octocat-spinner-32 README.md
Octocat-spinner-32 application.properties
README.md

CSV parsing support

Plugin page: http://artifacts.griffon-framework.org/plugin/csv

A port of Grails CSV Plugin to Griffon. Original (c) Les Hazlewood

The Griffon CSV Plugin allows you to easily parse and consume CSV data from a number of input sources. It supports complex parsing scenarios such as nested commas inside quotes, escaped tokens, multi-line quoted values and allows configuration of parsing options (separator char, escape char, text encoding, etc). It is based on Glen Smith (et. al.)'s OpenCSV project.

Usage

This plugin adds two methods eachLineCsv and toCsvReader to each of the following classes:

  • java.lang.String
  • java.io.File
  • java.io.InputStream
  • java.io.Reader

Using it is extremely simple. On any instance of the four data types, call the eachLineCsv method with a closure accepting the tokens (a String array) for each parsed line:

    "hello, world, how, are, you".eachLineCsv { tokens ->
        //only one line in this case and tokens.length == 5
    }

    new File("iso3166Countries.csv").eachLineCsv { tokens ->
        new Country(tokens[0],        //ISO 3166 country name
                    tokens[1]).save() //ISO 3166 2 letter character code
    }

These methods are added using the Groovy Module Extension mechanism which means they are always available. However should you need to call these methods form a different type then use griffon.plugins.csv.CSVReaderUtils.

Configuration

If you need to specify how the parsing should occur, you can construct your own csv reader with a map of configuration options and call the eachLine method on the constructed reader:

    anInputStream.toCsvReader(['charset':'UTF-8']).eachLine { tokens ->
        ...
    }

The supported config options:

  • separatorChar: the character to use as the delimiter to separate the tokens. Defaults to the comma: ','
  • quoteChar: the character indicating a quoted string is about to follow. Internal separatorChars can be inside the quoted string and they will not be split into tokens. Defaults to the double quote char: '"'
  • escapeChar: the character to escape an immediately following character, indicating to the parser not to treat it as a special char. Defaults to the backslash char: ''
  • skipLines: the number of lines in the input source to skip before parsing begins. This is useful to skip any potential CSV header lines that are not part of the CSV data. Defaults to zero '0'
  • strictQuotes: if characters outside of quotes should be ignored (implying each individual token is quoted. Defaults to false
  • ignoreLeadingWhiteSpace: white space in front of a quoted token is ignored. Defaults to true
  • charset: use the specified charset when parsing an InputStream. The value can be either the Charset name as a String, a java.nio.charset.Charset instance, or a java.nio.charset.CharsetDecoder instance. Defaults to the system default charset. Note that this option is ONLY valid for InputStream instances. It is ignored otherwise.
Something went wrong with that request. Please try again.