Estoy tratando de leer un archivo CSV con fast-csv en Node.js. El archivo csv tiene una fila de encabezado que contiene 90 columnas. 87 de ellos tienen nombres únicos. Pero 3 columnas tienen el mismo nombre de encabezado "Transformación". Esto es obviamente un error semántico. Fast-csv se queja de que los encabezados no son únicos y no lee el CSV. Lo sé, todos los nombres de las columnas deberían ser diferentes, pero así es como obtengo el archivo CSV. ¿Hay alguna manera de leer los encabezados y si alguna columna tiene un nombre que tiene otra columna, el nombre se convierte automáticamente en "Transformation_int", siendo int un número aleatorio?
csv.parseFile(csvFileName, { headers: true, delimiter: ";", headers: headers => headers.map( h => {h.replace( /[\r\n]+/gm, " " )}) }) .on ("data", function (row) { <doing something> }) .on ("error", error => {console.log("This error occured:",error)}) .on ("end", () => { console.log("Import finished")});no podría usar encabezados en absoluto, y luego la primera fila contendrá encabezados, y puede procesar manualmente el resto de los datos con referencia a la primera fila según lo necesite, e incluso mantener nombres duplicados:
headers: falseo puede pasar una función de transformación que detecta duplicados y también les cambia el nombre
aquí hay un ejemplo rápido que cambia el nombre de los encabezados duplicados agregando un número aleatorio:
csv.parseFile(csvFileName, { delimiter: ";", headers: headers => { // rename duplicate headers.map((el, i, ar) => { if (ar.indexOf(el) !== i) { headers[i] = `${el}_${i}`; } }); return headers; } }) .on("data", function(row) { console.log('row', row); }) .on("error", error => { console.log("This error occured:", error) }) .on("end", () => { console.log("Import finished") });