Estoy tratando de agregar todos los números de una columna a una variable. El problema es que mi código está agregando la cadena a la que da como resultado NaN.
var csvData=[]; let test = 0; var parser = parse({delimiter: ','}, function(err, data){ }); fs.createReadStream(__dirname+'/test2.csv','utf16le').pipe(parser) .on('data', function(csvrow) { csvData.push(csvrow); test = test + (csvrow[2]); }) .on('end',function() { console.log(test) });me da: "0Instalaciones diarias de dispositivos00001000101100" y si agrego parseInt (csvrow [2]) obtendré NaN para la prueba.
Mi objetivo es agregar todos los números después de las Instalaciones diarias del dispositivo, ¿qué me estoy perdiendo?
Investigué un poco sobre el paquete CSV de Node.js.
Si su archivo CSV contiene una fila de encabezado como se supone en el comentario de GrafiCode , como en este ejemplo:
"Day","Daily Device Installs" "2021-09-15",1 "2021-09-16",1 Entonces CSV Parser tiene una función para usar la fila de encabezado con nombres de columna. Ver la opción de columns .
Beneficio:
var csvData=[]; let test = 0; // options: use default delimiter comma and map header let parser = parse({ columns: header => header.map( column => { console.log(column); // could also map (eg similar to Snake_Case) return column.replace(/ /g,"_"); }) } function addToCounter(value) { if (!isNaN(value)) console.log("WARN: not a number: ", value) return; test += value; } // read from file fs.createReadStream(__dirname+'/test2.csv','utf16le').pipe(parser) .on('data', function(csvrow) { csvData.push(csvrow); addToCounter(csvrow.Daily_Device_Installs); // the column name as mapped with underscore }) .on('end',function() { console.log(test) });Nota:
csvData ahora contiene para cada fila un objeto (con nombres de columna como claves) en lugar de una matriz de columnas.probar
if (!isNaN(csvrow[2])) test += +csvrow[2];