Function parse

  • Parses CSV string into an array of arrays of strings.

    Parameters

    • input: string

      The input to parse.

    Returns string[][]

    The parsed data.

    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"]]);
    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.

    Type Parameters

    Parameters

    • input: string

      The input to parse.

    • options: T

      The options for parsing.

    Returns ParseResult<ParseOptions, T>

    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>[].

    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);
    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"]]);
    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"]]);
    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']]);
    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"]]);
    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,
    "Syntax error on line 2: expected 2 fields but got 3",
    );
    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,
    "Syntax error on line 2: expected 2 fields but got 3",
    );