Streaming API for reading and writing CSV for https://deno.land/.
import { readCSV } from "jsr:@vslinko/csv";
const f = await Deno.open("./example.csv");
for await (const row of readCSV(f)) {
  console.log("row:");
  for await (const cell of row) {
    console.log(`  cell: ${cell}`);
  }
}
f.close();Line numbering starts from zero. fromLine is inclusive, toLine is exclusive.
import { readCSV } from "jsr:@vslinko/csv";
const f = await Deno.open("./example.csv");
for await (const row of readCSV(f, { fromLine: 100, toLine: 200 })) {
  console.log("row:");
  for await (const cell of row) {
    console.log(`  cell: ${cell}`);
  }
}
f.close();import { readCSV } from "jsr:@vslinko/csv";
const f = await Deno.open("./example.csv");
const options = {
  columnSeparator: ";",
  lineSeparator: "\r\n",
  quote: "$",
};
for await (const row of readCSV(f, options)) {
  console.log("row:");
  for await (const cell of row) {
    console.log(`  cell: ${cell}`);
  }
}
f.close();import { readCSVObjects } from "jsr:@vslinko/csv";
const f = await Deno.open("./example.csv");
for await (const obj of readCSVObjects(f)) {
  console.log(obj);
}
f.close();import { readCSVObjects } from "jsr:@vslinko/csv";
const f = await Deno.open("./example.csv");
let row: string[] = [];
const reader = new CSVReader(f, {
  columnSeparator: "\t",
  lineSeparator: "\r\n",
  onCell(cell: string) {
    row.push(cell);
  },
  onRowEnd() {
    console.log(row);
    row = [];
  },
  onEnd() {
    console.log("end");
    f.close();
  },
  onError(err) {
    console.error(err);
  },
});
reader.read();import { writeCSV } from "jsr:@vslinko/csv";
const f = await Deno.open("./example.csv", {
  write: true,
  create: true,
  truncate: true,
});
const rows = [
  ["a", "b", "c"],
  ["1", "2", "3"],
];
await writeCSV(f, rows);
f.close();import { writeCSVObjects } from "jsr:@vslinko/csv";
const f = await Deno.open("./example.csv", {
  write: true,
  create: true,
  truncate: true,
});
const header = ["a", "b", "c"];
const asyncObjectsGenerator = async function* () {
  yield { a: "1", b: "2", c: "3" };
  yield { a: "4", b: "5", c: "6" };
};
await writeCSVObjects(f, asyncObjectsGenerator(), { header });
f.close();import { CSVWriter } from "jsr:@vslinko/csv";
const f = await Deno.open("./example.csv", {
  write: true,
  create: true,
  truncate: true,
});
const writer = new CSVWriter(f, {
  columnSeparator: "\t",
  lineSeparator: "\r\n",
});
await writer.writeCell("a");
await writer.writeCell("b");
await writer.writeCell("c");
await writer.nextLine();
await writer.writeCell("1");
await writer.writeCell("2");
await writer.writeCell("3");
f.close();test-node-csv-parse
Read 500001 lines for 8.937 seconds
test-deno-csv-CSVReader
Read 500001 lines for 8.986 seconds
test-deno-csv-readCSVRows
Read 500001 lines for 9.425 seconds
test-deno-csv-readCSVStream
Read 500001 lines for 13.657 seconds
test-deno-csv-readCSV
Read 500001 lines for 15.814 seconds