I'd be really interested to see how this parser compares with DataFrames. 
There's a bunch of test files in the DataFrames.jl/test directory.

 -- John

On May 27, 2014, at 3:49 PM, Abe Schneider <abe.schnei...@gmail.com> wrote:

> I don't know how the speed of the parser will be compared to DataFrames -- 
> I've done absolutely no work to date on profiling the code, but I thought 
> writing a CSV parser was a good way to test out code (and helped find a bunch 
> of bugs).
> 
> I've also committed (under examples/) the CSV parser. The grammar (from the 
> RFC) is:
> 
> @grammar csv begin
>   start = data
>   data = record + *(crlf + record)
>   record = field + *(comma + field)
>   field = escaped_field | unescaped_field
>   escaped_field = dquote + *(textdata | comma | cr | lf | dqoute2) + dquote
>   unescaped_field = textdata
>   textdata = r"[ !#$%&'()*+\-./0-~]+"
>   cr = '\r'
>   lf = '\n'
>   crlf = cr + lf
>   dquote = '"'
>   dqoute2 = "\"\""
>   comma = ','
> end
> 
> and the actions are:
> 
> tr["crlf"] = (node, children) -> nothing
> tr["comma"] = (node, children) -> nothing
> 
> tr["escaped_field"] = (node, children) -> node.children[2].value
> tr["unescaped_field"] = (node, children) -> node.children[1].value
> tr["field"] = (node, children) -> children
> tr["record"] = (node, children) -> unroll(children)
> tr["data"] = (node, children) -> unroll(children)
> tr["textdata"] = (node, children) -> node.value
> 
> 
> give the data:
> 
> parse_data = """1,2,3\r\nthis is,a test,of csv\r\n"these","are","quotes 
> ("")""""
> 
> and running the parser:
> 
> (node, pos, error) = parse(csv, parse_data)
> result = transform(tr, node)
> 
> I get:
> 
> {{"1","2","3"},{"this is","a test","of csv"},{"these","are","quotes (\"\")"}}
> 
> 
> 
> 
> 
> On Monday, May 26, 2014 3:41:26 AM UTC-4, harven wrote:
> Nice!
> 
> If you are interested by testing your library on a concrete problem, you may 
> want to parse comma separated value (csv) files. The bnf is in the 
> specification RFC4180. http://tools.ietf.org/html/rfc4180
> 
> AFAIK, the readcsv function provided in Base does not handle quotations well 
> whereas the csv parser in DataFrames is slow, so that julia does not have yet 
> a native efficient way to parse csv files.

Reply via email to