https://github.com/faradayio/typedcsv-ruby
The obvious thing: put types in CSV headers. Ruby lib.
https://github.com/faradayio/typedcsv-ruby
Last synced: about 1 year ago
JSON representation
The obvious thing: put types in CSV headers. Ruby lib.
- Host: GitHub
- URL: https://github.com/faradayio/typedcsv-ruby
- Owner: faradayio
- License: mit
- Created: 2017-09-06T14:44:58.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-09-06T18:25:29.000Z (almost 9 years ago)
- Last Synced: 2025-02-28T17:51:41.473Z (over 1 year ago)
- Language: Ruby
- Size: 11.7 KB
- Stars: 0
- Watchers: 8
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Typedcsv
Here's your standard untyped CSV:
```
name,income,created_at,tags,great
Seamus,12301.2,2012-02-21,"red,blue",true
```
Now, you and I know that `12301.2` is a number and `2012-02-21` is a date and `"red,blue"` is a list... so let's just write that into the headers:
```
name,income:number,created_at:date,tags:list,great:boolean
Seamus,12301.2,2012-02-21,"red,blue",true
```
Now let's parse it:
```
Typedcsv.foreach('file.csv', headers: true) do |row|
row['income'] # will be a Float
row['created_at'] # will be a Date
row['tags'] # will be an Array
row['great'] # will be TrueClass or FalseClass
end
```
This gem provides `Typedcsv.foreach()`, which takes exactly the same arguments as [ruby stdlib `CSV.foreach`](https://ruby-doc.org/stdlib-2.4.1/libdoc/csv/rdoc/CSV.html#method-c-foreach).
## Types
* text (default)
* number
* list (must be comma-separated and therefore quoted)
* date (must be ISO8601)
* time (must be ISO8601)
* boolean (recognizes "true" or "false")
## Benchmarks
It's about 10x slower than ruby's stdlib `CSV.foreach`:
```
cd benchmark && ruby benchmark.rb
[...]
CSV.foreach - array mode
2.503 (± 0.0%) i/s - 13.000 in 5.197588s
Typedcsv.foreach - array mode
0.253 (± 0.0%) i/s - 2.000 in 7.892107s
CSV.foreach - hash mode
1.830 (± 0.0%) i/s - 10.000 in 5.466998s
Typedcsv.foreach - hash mode
0.226 (± 0.0%) i/s - 2.000 in 8.867616s
```
## Sponsor
We use [`typedcsv`](https://github.com/faradayio/typedcsv) for [B2C customer intelligence at Faraday](https://www.faraday.io).
## Copyright
Copyright 2017 Faraday