Coder Social home page Coder Social logo

faster_csv's Introduction

= Read Me

by James Edward Gray II

== Description

Welcome to FasterCSV.

FasterCSV is intended as a replacement to Ruby's standard CSV library.  It was designed to address concerns users of that library had and it has three primary goals:

1.  Be significantly faster than CSV while remaining a pure Ruby library.
2.  Use a smaller and easier to maintain code base.  (FasterCSV is larger now, 
    but considerably richer in features.  The parsing core remains quite small.)
3.  Improve on the CSV interface.

Obviously, the last one is subjective.  If you love CSV's interface, odds are
good this one won't suit you.  I did try to defer to that interface whenever I
didn't have a compelling reason to change it though, so hopefully this won't be
too radically different.

== What's Different From CSV?

I'm sure I'll miss something, but I'll try to mention most of the major differences I am aware of, to help others quickly get up to speed:

=== CSV Parsing

* FasterCSV has a stricter parser and will throw MalformedCSVErrors on
  problematic data.
* FasterCSV has a less liberal idea of a line ending than CSV.  What you set as
  the <tt>:row_sep</tt> is law.
* CSV returns empty lines as <tt>[nil]</tt>.  FasterCSV calls them <tt>[]</tt>.
* FasterCSV has a much faster parser.

=== Interface

* FasterCSV uses Hash-style parameters to set options.
* FasterCSV does not have generate_row() or parse_row() from CSV.
* FasterCSV does not have CSV's Reader and Writer classes.
* FasterCSV::open() is more like Ruby's open() than CSV::open().
* FasterCSV objects support most standard IO methods.
* FasterCSV has a new() method used to wrap objects like String and IO for
  reading and writing.
* FasterCSV::generate() is different from CSV::generate().
* FasterCSV does not support partial reads.  It works line-by-line.
* FasterCSV does not allow the instance methods to override the separators for
  performance reasons.  They must be set in the constructor.

If you use this library and find yourself missing any functionality I have trimmed, please {let me know}[mailto:[email protected]].

== Documentation

See FasterCSV for documentation.

== Installing

See the INSTALL file for instructions.

== What is CSV, really?

FasterCSV maintains a pretty strict definition of CSV taken directly from {the RFC}[http://www.ietf.org/rfc/rfc4180.txt].  I relax the rules in only one place and that is to make using this library easier.  FasterCSV will parse all valid CSV.

What you don't want to do is feed FasterCSV invalid CSV.  Because of the way the CSV format works, it's common for a parser to need to read until the end of the file to be sure a field is invalid.  This eats a lot of time and memory.

Luckily, when working with invalid CSV, Ruby's built-in methods will almost always be superior in every way.  For example, parsing non-quoted fields is as easy as:

  data.split(",")

== Questions and/or Comments

Feel free to email {James Edward Gray II}[mailto:[email protected]] with
any questions.

faster_csv's People

Contributors

jeg2 avatar

Stargazers

Giles avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.