You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.5 KiB
81 lines
2.5 KiB
csv |
|
=== |
|
|
|
Pulls CSV data from .csv files into a hash of arrays keyed by the headers. First row is assumed to be the header row. |
|
|
|
Parsing uses Ruby's CSV, with options ``{headers: true, converters: :numeric}`` |
|
http://www.ruby-doc.org/stdlib-2.0/libdoc/csv/rdoc/CSV.html |
|
|
|
The ``csv`` method is a member of ``Squib::Deck``, but it is also available outside of the Deck DSL with ``Squib.csv()``. This allows a construction like:: |
|
|
|
data = Squib.csv file: 'data.csv' |
|
Squib::Deck.new(cards: data['name'].size) do |
|
end |
|
|
|
|
|
Options |
|
------- |
|
|
|
file |
|
default: ``'deck.csv'`` |
|
|
|
the CSV-formatted file to open. Opens relative to the current directory. If ``data`` is set, this option is overridden. |
|
|
|
data |
|
default: ``nil`` |
|
|
|
when set, CSV will parse this data instead of reading the file. |
|
|
|
strip |
|
default: ``true`` |
|
|
|
When ``true``, strips leading and trailing whitespace on values and headers |
|
|
|
explode |
|
default: ``'qty'`` |
|
|
|
Quantity explosion will be applied to the column this name. For example, rows in the csv with a ``'qty'`` of 3 will be duplicated 3 times. |
|
|
|
col_sep |
|
default: ``','`` |
|
|
|
Column separator. One of the CSV custom options in Ruby. See next option below. |
|
|
|
CSV custom options in Ruby standard lib. |
|
All of the options in Ruby's std lib version of CSV are supported **except** ``headers`` is always ``true`` and ``converters`` is always set to ``:numeric``. See the `Ruby Docs <http://ruby-doc.org/stdlib-2.2.0/libdoc/csv/rdoc/CSV.html#method-c-new>`_ for information on the options. |
|
|
|
Individual Pre-processing |
|
------------------------- |
|
|
|
The ``xlsx`` method also takes in a block that will be executed for each cell in your data. This is useful for processing individual cells, like putting a dollar sign in front of dollars, or converting from a float to an integer. The value of the block will be what is assigned to that cell. For example:: |
|
|
|
resource_data = Squib.csv(file: 'sample.xlsx') do |header, value| |
|
case header |
|
when 'Cost' |
|
"$#{value}k" # e.g. "3" becomes "$3k" |
|
else |
|
value # always return the original value if you didn't do anything to it |
|
end |
|
end |
|
|
|
Examples |
|
-------- |
|
|
|
|
|
To get the sample Excel files, go to `its source <https://github.com/andymeneely/squib/tree/dev/samples/data>`_ |
|
|
|
.. literalinclude:: ../../samples/data/_csv.rb |
|
:language: ruby |
|
:linenos: |
|
|
|
Here's the sample.csv |
|
|
|
.. literalinclude:: ../../samples/data/sample.csv |
|
:language: text |
|
:linenos: |
|
|
|
Here's the quantity_explosion.csv |
|
|
|
.. literalinclude:: ../../samples/data/quantity_explosion.csv |
|
:language: text |
|
:linenos:
|
|
|