Arbeit mit CSV in TypeScript: Vollständige Anleitung
CSV (Comma-Separated Values) ist eines der am weitesten verbreiteten Formate für den Austausch von Tabellendaten. Im TypeScript-Ökosystem gibt es mehrere ausgereifte Bibliotheken, die es ermöglichen, CSV-Dateien mit vollständiger Typunterstützung effizient zu parsen, zu generieren und zu transformieren. In diesem Artikel betrachten wir drei Hauptwerkzeuge: csv-parse, csv-stringify und papaparse, und analysieren praktische Anwendungsbeispiele.
1. Die Bibliothek csv-parse: CSV-Parsing mit Typisierung
csv-parse ist Teil des csv.js-Ökosystems, eine der leistungsfähigsten Bibliotheken zum Parsen von CSV. Sie unterstützt Streams, benutzerdefinierte Trennzeichen und eine strenge Typisierung durch TypeScript.
Installation:
npm install csv-parsenpm install @types/csv-parse // für TypeScript (falls nicht automatisch enthalten)Beispiel für das Parsen eines CSV-Strings:
import { parse } from 'csv-parse/sync';import { stringify } from 'csv-stringify/sync';
interface User { id: number; name: string; email: string; age: number;}
const csvData = `id,name,email,age1,Ivan Ivanov,ivan@example.com,302,Maria Petrova,maria@example.com,253,Alexei Smirnov,alex@example.com,35`;
// Parsing mit expliziter Typangabeconst records: User[] = parse(csvData, { columns: true, // erste Zeile sind die Kopfzeilen skip_empty_lines: true, delimiter: ',', cast: true // automatische Typumwandlung (Strings in Zahlen)});
console.log(records);// [// { id: 1, name: 'Ivan Ivanov', email: 'ivan@example.com', age: 30 },// { id: 2, name: 'Maria Petrova', email: 'maria@example.com', age: 25 },// { id: 3, name: 'Alexei Smirnov', email: 'alex@example.com', age: 35 }// ]2. Die Bibliothek csv-stringify: CSV-Generierung aus Objekten
csv-stringify ist die Partnerbibliothek zum Erstellen von CSV-Strings und -Dateien aus Arrays von Objekten oder Tupeln. Sie eignet sich hervorragend für den Datenexport.
Beispiel für die CSV-Generierung:
import { stringify } from 'csv-stringify/sync';
interface Product { sku: string; price: number; stock: number;}
const products: Product[] = [ { sku: 'PRD-001', price: 1500, stock: 10 }, { sku: 'PRD-002', price: 2500, stock: 5 }, { sku: 'PRD-003', price: 800, stock: 20 },];
const csvOutput = stringify(products, { header: true, columns: ['sku', 'price', 'stock'], // Reihenfolge und Filterung der Felder});
console.log(csvOutput);// sku,price,stock// PRD-001,1500,10// PRD-002,2500,5// PRD-003,800,203. Die Bibliothek PapaParse: Universeller Parser für Browser und Node.js
PapaParse ist die beliebteste Bibliothek für die Arbeit mit CSV in JavaScript/TypeScript. Sie funktioniert sowohl im Browser als auch in Node.js, unterstützt große Dateien über Streams, automatische Trennzeichenerkennung und Fehlerbehandlung.
Installation:
npm install papaparsenpm install @types/papaparseBeispiel mit Dateiverarbeitung in Node.js:
import fs from 'fs';import Papa from 'papaparse';
interface Transaction { date: string; amount: number; category: string;}
const fileContent = fs.readFileSync('transactions.csv', 'utf-8');
const result = Papa.parse<Transaction>(fileContent, { header: true, dynamicTyping: true, // automatische Typumwandlung skipEmptyLines: true,});
if (result.errors.length > 0) { console.error('Parsing-Fehler:', result.errors);} else { console.log('Transaktionen:', result.data); // result.data — Array von Transaction-Objekten}
// Asynchrones Parsing mit Streams für große Dateienconst stream = fs.createReadStream('large-file.csv');Papa.parse(stream,