Parse CSV
Parse CSV with advanced options (headers, delimiters, encoding)
Source Code
import fs from "fs";
import path from "path";
import Papa from "papaparse";
const [inputPath, outputPath, hasHeaders = "true", delimiter = ""] = process.argv.slice(2);
if (!inputPath || !outputPath) {
console.error("Usage: inputPath outputPath [hasHeaders] [delimiter]");
process.exit(1);
}
try {
console.log(`Reading CSV: ${inputPath}...`);
const csvContent = fs.readFileSync(inputPath, "utf-8");
const parseConfig = {
header: hasHeaders === "true",
skipEmptyLines: true,
dynamicTyping: true,
};
if (delimiter) {
parseConfig.delimiter = delimiter;
}
const result = Papa.parse(csvContent, parseConfig);
if (result.errors.length > 0) {
console.log(` Warnings: ${result.errors.length} parsing issues`);
for (const err of result.errors.slice(0, 5)) {
console.log(` - Row ${err.row}: ${err.message}`);
}
}
// Ensure output directory exists
const dir = path.dirname(outputPath);
if (dir && dir !== ".") {
fs.mkdirSync(dir, { recursive: true });
}
fs.writeFileSync(outputPath, JSON.stringify(result.data, null, 2));
const fields = hasHeaders === "true" && result.meta.fields ? result.meta.fields : [];
console.log(`\nā Parsed CSV`);
console.log(` Rows: ${result.data.length}`);
if (fields.length > 0) {
console.log(` Fields: ${fields.join(", ")}`);
}
console.log(` Delimiter: ${result.meta.delimiter}`);
console.log(` Written to: ${outputPath}`);
console.log(
JSON.stringify({
success: true,
inputPath,
outputPath,
rows: result.data.length,
fields,
delimiter: result.meta.delimiter,
})
);
} catch (error) {
console.error("Error:", error.message);
process.exit(1);
}