Working with CSV in TypeScript
Comprehensive CSV file handling with automatic format detection, advanced header processing, and high-performance data operations.
Installation
Section titled “Installation”npm install fairspecGetting Started
Section titled “Getting Started”The CSV plugin provides these capabilities:
loadCsvTable- Load CSV/TSV files into tablessaveCsvTable- Save tables to CSV/TSV filesCsvPlugin- Plugin for framework integration
For example:
import { loadCsvTable } from "fairspec"
const table = await loadCsvTable({ data: "table.csv" })// the column types will be automatically inferred// or you can provide a Table SchemaBasic Usage
Section titled “Basic Usage”Loading CSV Files
Section titled “Loading CSV Files”import { loadCsvTable } from "fairspec"
// Load a simple CSV fileconst table = await loadCsvTable({ data: "data.csv" })
// Load with custom formatconst table = await loadCsvTable({ data: "data.csv", format: { name: "csv", delimiter: ";", headerRows: [1] }})
// Load multiple CSV files (concatenated)const table = await loadCsvTable({ data: ["part1.csv", "part2.csv", "part3.csv"]})Saving CSV Files
Section titled “Saving CSV Files”import { saveCsvTable } from "fairspec"
// Save with default optionsawait saveCsvTable(table, { path: "output.csv" })
// Save with custom formatawait saveCsvTable(table, { path: "output.csv", format: { name: "csv", delimiter: "\t", quoteChar: "'" }})
// Save as TSVawait saveCsvTable(table, { path: "output.tsv", format: { name: "tsv" }})Automatic Format Detection
Section titled “Automatic Format Detection”import { loadCsvTable } from "fairspec"
// Format is automatically detected when not specifiedconst table = await loadCsvTable({ data: "unknown-dialect.csv" })// The CSV plugin will automatically infer delimiter, quote characters, etc.
// You can also explicitly specify the format if detection isn't accurateconst table = await loadCsvTable({ data: "data.csv", format: { name: "csv", delimiter: ",", quoteChar: '"', headerRows: [1] }})Advanced Features
Section titled “Advanced Features”Multi-Header Row Processing
Section titled “Multi-Header Row Processing”// CSV with multiple header rows:// Year,2023,2023,2024,2024// Quarter,Q1,Q2,Q1,Q2// Revenue,100,120,110,130
const table = await loadCsvTable({ data: "multi-header.csv", format: { name: "csv", headerRows: [1, 2], headerJoin: "_" }})// Resulting columns: ["Year_Quarter", "2023_Q1", "2023_Q2", "2024_Q1", "2024_Q2"]Comment Row Handling
Section titled “Comment Row Handling”// CSV with comment rows:// # This is a comment// # Generated on 2024-01-01// Name,Age,City// John,25,NYC
const table = await loadCsvTable({ data: "with-comments.csv", format: { name: "csv", commentRows: [1, 2], headerRows: [3] }})
// Or use commentPrefix to skip lines starting with a specific characterconst table = await loadCsvTable({ data: "with-comments.csv", format: { name: "csv", commentPrefix: "#", headerRows: [1] }})Remote File Loading
Section titled “Remote File Loading”// Load from URLconst table = await loadCsvTable({ data: "https://example.com/data.csv"})
// Load multiple remote filesconst table = await loadCsvTable({ data: [ "https://api.example.com/data-2023.csv", "https://api.example.com/data-2024.csv" ]})