parse
import { parse } from "jsr:@ende/csv";function
function parse(input: string): string[][]Parses CSV string into an array of arrays of strings.
input: stringThe input to parse.
Returns
The parsed data.
Example: Usage
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
const string = "a,b,c\n#d,e,f";
assertEquals(parse(string), [["a", "b", "c"], ["#d", "e", "f"]]);
Example: Quoted fields
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
const string = `"a ""word""","comma,","newline\n"\nfoo,bar,baz`;
const result = parse(string);
assertEquals(result, [
['a "word"', "comma,", "newline\n"],
["foo", "bar", "baz"]
]);
function
function parse<T extends ParseOptions>(input: string, options: T): ParseResult<ParseOptions, T>Parses CSV string into an array of objects or an array of arrays of strings.
If columns or skipFirstRow option is provided, it returns an array of
objects, otherwise it returns an array of arrays of string.
input: stringThe input to parse.
options: TThe options for parsing.
Returns
If you don't provide options.skipFirstRow or options.columns, it
returns string[][]. If you provide options.skipFirstRow or
options.columns, it returns Record<string, string>[].
Example: Don't skip first row with skipFirstRow: false
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
import { assertType, IsExact } from "@ende/testing/types"
const string = "a,b,c\nd,e,f";
const result = parse(string, { skipFirstRow: false });
assertEquals(result, [["a", "b", "c"], ["d", "e", "f"]]);
assertType<IsExact<typeof result, string[][]>>(true);
Example: Skip first row with skipFirstRow: true
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
import { assertType, IsExact } from "@ende/testing/types"
const string = "a,b,c\nd,e,f";
const result = parse(string, { skipFirstRow: true });
assertEquals(result, [{ a: "d", b: "e", c: "f" }]);
assertType<IsExact<typeof result, Record<string, string>[]>>(true);
Example: Specify columns with columns option
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
import { assertType, IsExact } from "@ende/testing/types"
const string = "a,b,c\nd,e,f";
const result = parse(string, { columns: ["x", "y", "z"] });
assertEquals(result, [{ x: "a", y: "b", z: "c" }, { x: "d", y: "e", z: "f" }]);
assertType<IsExact<typeof result, Record<"x" | "y" | "z", string>[]>>(true);
Example: Specify columns with columns option and skip first row with
skipFirstRow: true
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
import { assertType, IsExact } from "@ende/testing/types"
const string = "a,b,c\nd,e,f";
const result = parse(string, { columns: ["x", "y", "z"], skipFirstRow: true });
assertEquals(result, [{ x: "d", y: "e", z: "f" }]);
assertType<IsExact<typeof result, Record<"x" | "y" | "z", string>[]>>(true);
Example: TSV (tab-separated values) with separator: "\t"
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
const string = "a\tb\tc\nd\te\tf";
const result = parse(string, { separator: "\t" });
assertEquals(result, [["a", "b", "c"], ["d", "e", "f"]]);
Example: Trim leading space with trimLeadingSpace: true
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
const string = " a, b, c\n";
const result = parse(string, { trimLeadingSpace: true });
assertEquals(result, [["a", "b", "c"]]);
Example: Lazy quotes with lazyQuotes: true
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
const string = `a "word","1"2",a","b`;
const result = parse(string, { lazyQuotes: true });
assertEquals(result, [['a "word"', '1"2', 'a"', 'b']]);
Example: Set comment prefix with comment option
import { parse } from "@ende/csv/parse";
import { assertEquals } from "@ende/assert/equals";
const string = "a,b,c\n# THIS IS A COMMENT LINE\nd,e,f";
const result = parse(string, { comment: "#" });
assertEquals(result, [["a", "b", "c"], ["d", "e", "f"]]);
Example: Infer the number of fields from the first row with fieldsPerRecord: 0
import { parse } from "@ende/csv/parse";
import { assertThrows } from "@ende/assert/throws";
// Note that the second row has more fields than the first row
const string = "a,b\nc,d,e";
assertThrows(
() => parse(string, { fieldsPerRecord: 0 }),
SyntaxError,
"Syntax error on line 2: expected 2 fields but got 3",
);
Example: Enforce the number of fields for each row with fieldsPerRecord: 2
import { parse } from "@ende/csv/parse";
import { assertThrows } from "@ende/assert/throws";
const string = "a,b\nc,d,e";
assertThrows(
() => parse(string, { fieldsPerRecord: 2 }),
SyntaxError,
"Syntax error on line 2: expected 2 fields but got 3",
);
function
function parse<T extends ParseOptions>(input: string, options: T = [UNSUPPORTED]): ParseResult<ParseOptions, T>