benchmark/parse.rb # 284km/rcsv Calculating ------------------------------------- unquoted 166.007 (±12.7%) i/s - 810.000 in 5.007349s quoted 146.088 (±24.6%) i/s - 656.000 in 5.009174s include col_sep 131.046 (±28.2%) i/s - 580.000 in 5.001424s include row_sep 138.830 (±18.7%) i/s - 666.000 in 5.054874s encode utf-8 100.167 (±26.0%) i/s - 448.000 in 5.576945s encode sjis 137.429 (±18.2%) i/s - 660.000 in 5.028713s ========================================================= # ruby/csv Calculating ------------------------------------- unquoted 37.546 (±21.3%) i/s - 177.000 in 5.066859s quoted 16.773 (±23.8%) i/s - 78.000 in 5.026788s include col_sep 8.316 (±24.0%) i/s - 39.000 in 5.113550s include row_sep 1.842 (±54.3%) i/s - 9.000 in 5.422059s encode utf-8 26.126 (±15.3%) i/s - 126.000 in 5.055306s encode sjis 29.573 (±16.9%) i/s - 142.000 in 5.028898s
Yesterday's benchmark. still have various problem, continues development now.
Yesterday's benchmark. still have various problem, continues development now. About 3 times faster
284km/rcsv forked from arp/rcsv Using the Ruby binding of libcsv with FFI, I made the interface as ruby/csv as possible.
# Motivation # Concern
# Motivation - CSV is often used - Sometimes I use a large CSV
# Concern - oj (A fast JSON parser and Object marshaller as a Ruby gem.) - Demand (few effective use cases?) - Don’t improve performance so much for cost? => Hmm, let's do it.
# CSV RFC 4180
# CSV 1. Each record is located on a separate line, delimited by a line break (CRLF). aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
# CSV 2. The last record in the file may or may not have an ending line break. aaa,bbb,ccc CRLF zzz,yyy,xxx
# CSV 3. There maybe an optional header line appearing as the first line of the file. This header should contain the same number of fields as the records. field_name,field_name,field_name CRLF aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
# CSV 4. … Each line should contain the same number of fields. Spaces are considered part of a field and should not be ignored. The last field in the record must not be followed by a comma. aaa,bbb,ccc
# CSV 5. Each field may or may not be enclosed in double quotes. If fields are not enclosed with double quotes, then double quotes may not appear inside the fields. "aaa","bbb","ccc" CRLF zzz,yyy,xxx
# CSV 6. Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes. "aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx
# CSV 7. If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote. “aaa","b""bb","ccc"
# ruby/csv - 2007-12-24 23:41 jeg2 o * lib/csv.rb, test/csv/ test_csv.rb: Removed in preparation for code が全部消える。FasterCSV を入れる準備の模様。 - 2007-12-25 02:46 jeg2 o * lib/csv.rb: Import the FasterCSV source as the new CSV class. FasterCSV が入る。
# ruby/csv 2008-09-21 00:39 jeg2 o * lib/csv/csv.rb: Reworked CSV's parser and generator to be m17 大きく色々と変わっていて、m17n の対応などもこの時期に行われて いる模様 2009, 2010 というのは、encoding に関する commit が多いことが見える 2012-11-14 02:53 zzak o * lib/csv.rb (init_comments): Document private method #init_comm 2012-09-19 22:07 zzak o * lib/csv.rb (Object#CSV, Array#to_csv, String#parse_csv): Exa 2012 年の特徴のひとつに、zzak が CSV のドキュメントを書いてくれ たことがある
# ruby/csv 2017-04-24 17:38 SHIBATA Hiroshi o─┴─┘ <v0.0.1> Enabled travis 2017-04-24 17:37 SHIBATA Hiroshi o Enabled tests used by test suite of ruby core 2017-04-24 17:25 SHIBATA Hiroshi o Update basically configuration for gemspec 2017-04-24 17:16 SHIBATA Hiroshi o Update BSDL license. 2017-04-24 17:15 SHIBATA Hiroshi o Update repository name 2017-04-24 17:15 SHIBATA Hiroshi o Removed needless skelton files 2017-04-24 15:43 SHIBATA Hiroshi o overrided boilerplate by bundle init cmath 柴田さんによって、ruby/csv が誕生
# ruby/csv 2018 最近 須藤さんがメンテナになったこと。 コードの整理が進んでいるように見える 2018-03-06 09:34 Kenta Murata o─┘ Describe our attitude to RuboCop ### NOTE: About RuboCop We don't use RuboCop because we can manage our coding style by ourselves. We want to accept small fluc tuations in our coding style because we use Ruby. Please do not submit issues and PRs that aim to introduce RuboCop in this repository.