Option cast
The cast
option works at the field-level to alter its value. It is possible to transform the field's value or change its type.
- Type:
function
- Optional
- Default:
undefined
- Since: 2.2.0
- Related:
cast_date
,info
,on_record
— see Available Options
The cast
value is expected to be a function that receives context-rich information. The function has full control over a field.
Usage
The cast
user function is called with 2 arguments: the field value
and the context
object. The user function may return the value as-is or any other value including null
and undefined
.
The test/option.cast.coffee
test provides insights on how to use it and its supported functionalities. It returns the first column untouched, converts the second column to an integer and return a new string from the third column's value.
Context
The context
object exposes the following properties:
column
(number|string)
The column name if thecolumns
options is defined, or the field position.empty_lines
(number)
Internal counter of empty lines encountered until this field.header
(boolean)
A boolean indicating if the provided value is a part of the header.index
(number)
The field position within the current record starting at 0.invalid_field_length
(number)
Number of records with a non uniform length whenrelax_column_count
is true. It was namedskipped_lines
until version 3.lines
(number)
The number of lines which have been processed including the current line.quoting
(boolean)
A boolean indicating if the field was surrounded by quotes.records
(number)
The number of records which have been fully parsed. It was namedcount
until version 3.
The context example uses the context to transform the first field into a date and replace the second field with the injected context:
Using the cast
and columns
functions conjointly
The cast
function is called for each and every field, whether it is considered a header or not. The columns
function is called once the first record is created (if treated as a header). For this reason, cast
is executed before columns
.
To distinguish a header field from a data field in the cast
function, use the context.header
property from the second argument to the cast
function:
Note, the above example can be rewritten to implement the columns
transformation directly inside cast
, by setting columns: true
and by replacing if(context.header) return value;
by if(context.header) return value.toUpperCase();
: