Skip to main content
The Deno 2 Release Candidate is here
Learn more
Module

x/simple_utility/deps.pure.ts>parse

Simplify processing for Deno.
Latest
function parse
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

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

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

Parameters

input: string

The input to parse.

Returns

string[][]

The parsed data.

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

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

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

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

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"

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

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

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

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

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

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",
);

Type Parameters

T extends ParseOptions

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