import { parse } from "https://deno.land/x/simple_utility@v2.3.2/deps.pure.ts";
Parses CSV string into an array of arrays of strings.
Examples
Usage
Usage
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/assert/equals";
const string = "a,b,c\n#d,e,f";
assertEquals(parse(string), [["a", "b", "c"], ["#d", "e", "f"]]);
Quoted fields
Quoted fields
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/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"]
]);
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.
Examples
Don't skip first row with skipFirstRow: false
Don't skip first row with skipFirstRow: false
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/assert/equals";
import { assertType, IsExact } from "@std/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);
Skip first row with skipFirstRow: true
Skip first row with skipFirstRow: true
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/assert/equals";
import { assertType, IsExact } from "@std/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);
Specify columns with columns
option
Specify columns with columns
option
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/assert/equals";
import { assertType, IsExact } from "@std/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);
Specify columns with columns
option and skip first row with
skipFirstRow: true
Specify columns with columns
option and skip first row with
skipFirstRow: true
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/assert/equals";
import { assertType, IsExact } from "@std/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);
TSV (tab-separated values) with separator: "\t"
TSV (tab-separated values) with separator: "\t"
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/assert/equals";
const string = "a\tb\tc\nd\te\tf";
const result = parse(string, { separator: "\t" });
assertEquals(result, [["a", "b", "c"], ["d", "e", "f"]]);
Trim leading space with trimLeadingSpace: true
Trim leading space with trimLeadingSpace: true
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/assert/equals";
const string = " a, b, c\n";
const result = parse(string, { trimLeadingSpace: true });
assertEquals(result, [["a", "b", "c"]]);
Lazy quotes with lazyQuotes: true
Lazy quotes with lazyQuotes: true
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/assert/equals";
const string = `a "word","1"2",a","b`;
const result = parse(string, { lazyQuotes: true });
assertEquals(result, [['a "word"', '1"2', 'a"', 'b']]);
Set comment prefix with comment
option
Set comment prefix with comment
option
import { parse } from "@std/csv/parse";
import { assertEquals } from "@std/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"]]);
Infer the number of fields from the first row with fieldsPerRecord: 0
Infer the number of fields from the first row with fieldsPerRecord: 0
import { parse } from "@std/csv/parse";
import { assertThrows } from "@std/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,
"record on line 2: expected 2 fields but got 3",
);
Enforce the number of fields for each row with fieldsPerRecord: 2
Enforce the number of fields for each row with fieldsPerRecord: 2
import { parse } from "@std/csv/parse";
import { assertThrows } from "@std/assert/throws";
const string = "a,b\nc,d,e";
assertThrows(
() => parse(string, { fieldsPerRecord: 2 }),
SyntaxError,
"record on line 2: expected 2 fields but got 3",
);
Parameters
The options for parsing.