Package Exports
- @fast-csv/format
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@fast-csv/format) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@fast-csv/format
fast-csv
package to create CSVs.
Installation
npm i -S @fast-csv/format
Usage
To use fast-csv
in javascript
you can require the module
const csv = require('@fast-csv/format');
To import with typescript
import * as format csv '@fast-csv/format';
- Options
- Valid Rows Types
- Formatting Methods
- Examples
Options
delimiter: {string} = ','
: Specify an alternate field delimiter such as;
or\t
.- NOTE When specifying an alternate
delimiter
you may only pass in a single character delimiter
- NOTE When specifying an alternate
rowDelimiter: {string} = '\n'
: Specify an alternate row delimiter (i.e\r\n
)quote: {string|boolean} = '"'
:- If provided as a string it will be used to quote fields that contain a delimiter.
"first,name",last name
- If
quote
is set totrue
the default quote will be used.- NOTE This is the same as not providing the option
- If
quote
false then quoting will be disabled- CAUTION If your field could contain a delimiter then you may end up with extra columns
- If provided as a string it will be used to quote fields that contain a delimiter.
escape: {string} = '"'
: The character to use when escaping a value that isquoted
and contains aquote
character that is not the end of the field.i.e
:First,"Name"' => '"First,""Name"""
includeEndRowDelimiter: {boolean} = false
: Set totrue
to include a row delimiter at the end of the csv.writeBOM: {boolean} = false
: Set to true if you want the first character written to the stream to be a utf-8 BOM character.headers: {null|boolean|string[]} = null
:- If true then the headers will be auto detected from the first row.
- If the row is a one-dimensional array then headers is a no-op
- If the row is an object then the keys will be used.
- If the row is an array of two element arrays (
[ ['header', 'column'], ['header2', 'column2'] ]
) then the first element in each array will be used.
- If there is not a headers row and you want to provide one then set to a
string[]
- NOTE If the row is an object the headers must match fields in the object, otherwise you will end up with empty fields
- NOTE If there are more headers than columns then additional empty columns will be added
- If true then the headers will be auto detected from the first row.
alwaysWriteHeaders: {boolean} = false
: Set to true if you always want headers written, even if no rows are written.- NOTE This will throw an error if headers are not specified as an array.
quoteColumns: {boolean|boolean[]|{[string]: boolean} = false
- If
true
then columns and headers will be quoted (unlessquoteHeaders
is specified). - If it is an object then each key that has a true value will be quoted ((unless
quoteHeaders
is specified) - If it is an array then each item in the array that is true will have the column at the corresponding index quoted (unless
quoteHeaders
is specified) - NOTE if
quoteHeaders
is not specified this option will apply to both columns and headers.
- If
quoteHeaders: {boolean|boolean[]|{[string]: boolean} = quoteColumns
- Defaults to the
quoteColumns
option. - If
true
then all headers will be quoted. - If it is an object then each key that has a true value will be quoted (see example below)
- If it is an array then each item in the array that is true will have the header at the corresponding index quoted (see example below)
- Defaults to the
transform: {(row) => Row | (row, cb) => void} = null
: A function that accepts a row and returns a transformed one to be written, or your function can accept an optional callback to do async transformations.
Valid Row Types
When creating a CSV fast-csv
supports a few row formats.
{[string]: any}
You can pass in object to any formatter function if your CSV requires headers the keys of the first object will be used as the header names.
{
a: "a1",
b: "b1",
c: "c1",
}
//Generated CSV
//a,b,c
//a1,b1,c1
string[]
You can also pass in your rows as arrays. If your CSV requires headers the first row passed in will be the headers used.
[
["a", "b", "c"],
["a1", "b1", "c1"]
]
//Generated CSV
//a,b,c
//a1,b1,c1
[string, any][]
This is the least commonly used format but can be useful if you have requirements to generate a CSV with headers with the same column name (Crazy we know but we have seen it).
[
[
["a", "a1"],
["a", "a2"],
["b", "b1"],
["b", "b2"],
["c", "c1"],
["c", "c2"]
]
]
//Generated CSV
//a,a,b,b,c,c
//a1,a2,b1,b2,c1,c2
Formatting Methods
csv.format(options): CsvFormatterStream
This is the main entry point for formatting CSVs. It is used by all other helper methods.
const stream = csv.format();
stream.pipe(process.stdout);
stream.write([ 'a', 'b' ]);
stream.write([ 'a1', 'b1' ]);
stream.write([ 'a2', 'b2' ]);
stream.end();
Expected output
a,b
a1,b1
a2,b2
write(rows[, options]): CsvFormatterStream
Create a formatter, writes the rows and returns the CsvFormatterStream
.
const rows = [
[ 'a', 'b' ],
[ 'a1', 'b1' ],
[ 'a2', 'b2' ],
];
csv.write(rows).pipe(process.stdout);
Expected output
a,b
a1,b1
a2,b2
writeToStream(stream, rows[, options])
Write an array of values to a WritableStream
, and returns the original stream
const rows = [
[ 'a', 'b' ],
[ 'a1', 'b1' ],
[ 'a2', 'b2' ],
];
csv.writeToStream(process.stdout, rows);
Expected output
a,b
a1,b1
a2,b2
writeToPath(path, rows[, options])
Write an array of values to the specified path
const rows = [
[ 'a', 'b' ],
[ 'a1', 'b1' ],
[ 'a2', 'b2' ],
];
csv.writeToPath(path.resolve(__dirname, 'tmp.csv'), rows)
.on('error', err => console.error(err))
.on('finish', () => console.log('Done writing.'));
Expected file content
a,b
a1,b1
a2,b2
writeToString(arr[, options]): Promise<string>
Formats the rows and returns a Promise
that will resolve with the CSV content as a string
.
const rows = [
[ 'a', 'b' ],
[ 'a1', 'b1' ],
[ 'a2', 'b2' ],
];
csv.writeToString(rows).then(data => console.log(data));
writeToBuffer(arr[, options]): Promise<Buffer>
Formats the rows and returns a Promise
that will resolve with the CSV content as a Buffer
.
const rows = [
[ 'a', 'b' ],
[ 'a1', 'b1' ],
[ 'a2', 'b2' ],
];
csv.writeToBuffer(rows).then(data => console.log(data.toString()));