read nodejs node leer into create array node.js csv

node.js - leer - NodeJs leyendo el archivo csv



nodejs leer csv (7)

El proyecto node-csv al que hace referencia es completamente suficiente para la tarea de transformar cada fila de una gran parte de los datos CSV, de los documentos en: http://csv.adaltas.com/transform/ :

csv() .from(''82,Preisner,Zbigniew/n94,Gainsbourg,Serge'') .to(console.log) .transform(function(row, index, callback){ process.nextTick(function(){ callback(null, row.reverse()); }); });

Desde mi experiencia, puedo decir que también es una implementación bastante rápida, he estado trabajando con ella en conjuntos de datos con casi 10k registros y los tiempos de procesamiento estuvieron en un nivel razonable de decenas de milisegundos para todo el conjunto.

Recordando la sugerencia de la solución basada en stream de jurka : node-csv IS stream y sigue la API de streaming de Node.js.

Con nodejs quiero analizar un archivo .csv de 10000 registros y realizar algunas operaciones en cada fila. Intenté usar http://www.adaltas.com/projects/node-csv . No pude hacer que esto se detuviera en cada fila. Esto solo lee a través de los 10000 registros. Necesito hacer lo siguiente

1) leer csv línea por línea 2) realizar operación que consume tiempo en cada línea 3) ir a la siguiente línea

¿Alguien puede sugerir alguna idea alternativa aquí?


Lo usé de esta manera:

var fs = require(''fs''); var parse = require(''csv-parse''); var csvData=[]; fs.createReadStream(req.file.path) .pipe(parse({delimiter: '':''})) .on(''data'', function(csvrow) { console.log(csvrow); //do something with csvrow csvData.push(csvrow); }) .on(''end'',function() { //do something wiht csvData console.log(csvData); });


Mi solución actual utiliza el módulo asíncrono para ejecutar en serie:

var fs = require(''fs''); var parse = require(''csv-parse''); var async = require(''async''); var inputFile=''myfile.csv''; var parser = parse({delimiter: '',''}, function (err, data) { async.eachSeries(data, function (line, callback) { // do something with the line doSomething(line).then(function() { // when processing finishes invoke the callback to move to the next one callback(); }); }) }); fs.createReadStream(inputFile).pipe(parser);


Para pausar la transmisión en https://www.npmjs.org/package/fast-csv , puede hacer lo siguiente:

let csvstream = csv.fromPath(filePath, { headers: true }) .on("data", function (row) { csvstream.pause(); // do some heavy work // when done resume the stream csvstream.resume(); }) .on("end", function () { console.log("We are done!") }) .on("error", function (error) { console.log(error) });


Parece que necesita utilizar alguna solución basada en secuencias, ya existían tales bibliotecas, por lo que antes de reinventarse a sí mismo, pruebe esta biblioteca, que también incluye soporte de validación. https://www.npmjs.org/package/fast-csv


Pruebe el plugin npm línea por línea.

npm install line-by-line --save


npm instala csv

Ejemplo de archivo CSV Necesitará un archivo CSV para analizar, por lo tanto, ya tiene uno, o puede copiar el texto a continuación y pegarlo en un nuevo archivo y llamar a ese archivo "mycsv.csv"

ABC, 123, Fudge 532, CWE, ICECREAM 8023, POOP, DOGS 441, CHEESE, CARMEL 221, ABC, HOUSE 1 ABC, 123, Fudge 2 532, CWE, ICECREAM 3 8023, POOP, DOGS 4 441, CHEESE, CARMEL 5 221, ABC, HOUSE

Ejemplo de código de lectura y análisis del archivo CSV

Crea un nuevo archivo e inserta el siguiente código en él. Asegúrese de leer lo que está sucediendo detrás de escena.

var csv = require(''csv''); // loads the csv module referenced above. var obj = csv(); // gets the csv module to access the required functionality function MyCSV(Fone, Ftwo, Fthree) { this.FieldOne = Fone; this.FieldTwo = Ftwo; this.FieldThree = Fthree; }; // Define the MyCSV object with parameterized constructor, this will be used for storing the data read from the csv into an array of MyCSV. You will need to define each field as shown above. var MyData = []; // MyData array will contain the data from the CSV file and it will be sent to the clients request over HTTP. obj.from.path(''../THEPATHINYOURPROJECT/TOTHE/csv_FILE_YOU_WANT_TO_LOAD.csv'').to.array(function (data) { for (var index = 0; index < data.length; index++) { MyData.push(new MyCSV(data[index][0], data[index][1], data[index][2])); } console.log(MyData); }); //Reads the CSV file from the path you specify, and the data is stored in the array we specified using callback function. This function iterates through an array and each line from the CSV file will be pushed as a record to another array called MyData , and logs the data into the console to ensure it worked. var http = require(''http''); //Load the http module. var server = http.createServer(function (req, resp) { resp.writeHead(200, { ''content-type'': ''application/json'' }); resp.end(JSON.stringify(MyData)); }); // Create a webserver with a request listener callback. This will write the response header with the content type as json, and end the response by sending the MyData array in JSON format. server.listen(8080); // Tells the webserver to listen on port 8080(obviously this may be whatever port you want.) 1 var csv = require(''csv''); 2 // loads the csv module referenced above. 3 ​ 4 var obj = csv(); 5 // gets the csv module to access the required functionality 6 ​ 7 function MyCSV(Fone, Ftwo, Fthree) { 8 this.FieldOne = Fone; 9 this.FieldTwo = Ftwo; 10 this.FieldThree = Fthree; 11 }; 12 // Define the MyCSV object with parameterized constructor, this will be used for storing the data read from the csv into an array of MyCSV. You will need to define each field as shown above. 13 ​ 14 var MyData = []; 15 // MyData array will contain the data from the CSV file and it will be sent to the clients request over HTTP. 16 ​ 17 obj.from.path(''../THEPATHINYOURPROJECT/TOTHE/csv_FILE_YOU_WANT_TO_LOAD.csv'').to.array(function (data) { 18 for (var index = 0; index < data.length; index++) { 19 MyData.push(new MyCSV(data[index][0], data[index][1], data[index][2])); 20 } 21 console.log(MyData); 22 }); 23 //Reads the CSV file from the path you specify, and the data is stored in the array we specified using callback function. This function iterates through an array and each line from the CSV file will be pushed as a record to another array called MyData , and logs the data into the console to ensure it worked. 24 ​ 25 var http = require(''http''); 26 //Load the http module. 27 ​ 28 var server = http.createServer(function (req, resp) { 29 resp.writeHead(200, { ''content-type'': ''application/json'' }); 30 resp.end(JSON.stringify(MyData)); 31 }); 32 // Create a webserver with a request listener callback. This will write the response header with the content type as json, and end the response by sending the MyData array in JSON format. 33 ​ 34 server.listen(8080); 35 // Tells the webserver to listen on port 8080(obviously this may be whatever port you want.) Things to be aware of in your app.js code In lines 7 through 11, we define the function called ''MyCSV'' and the field names. If your CSV file has multiple columns make sure you define this correctly to match your file. On line 17 we define the location of the CSV file of which we are loading. Make sure you use the correct path here.

Inicie su aplicación y verifique la funcionalidad Abra una consola y escriba el siguiente comando:

Aplicación Node de la aplicación 1 Node Debería ver el siguiente resultado en su consola:

[ MYCSV { Fieldone: ''ABC'', Fieldtwo: ''123'', Fieldthree: ''Fudge'' }, MYCSV { Fieldone: ''532'', Fieldtwo: ''CWE'', Fieldthree: ''ICECREAM'' }, MYCSV { Fieldone: ''8023'', Fieldtwo: ''POOP'', Fieldthree: ''DOGS'' }, MYCSV { Fieldone: ''441'', Fieldtwo: ''CHEESE'', Fieldthree: ''CARMEL'' }, MYCSV { Fieldone: ''221'', Fieldtwo: ''ABC'', Fieldthree: ''HOUSE'' }, ]

1 [MYCSV {Fieldone: ''ABC'', Fieldtwo: ''123'', Fieldthree: ''Fudge''}, 2 MYCSV {Fieldone: ''532'', Fieldtwo: ''CWE'', Fieldthree: ''ICECREAM''}, 3 MYCSV {Fieldone: ''8023'', Fieldtwo: ''POOP'', Fieldthree: ''DOGS''}, 4 MYCSV {Fieldone: ''441'', Fieldtwo: ''CHEESE'', Fieldthree: ''CARMEL''}, 5 MYCSV {Fieldone: ''221'', Fieldtwo: ''ABC'', Fieldthree: ''HOUSE''},] Ahora debería abrir un navegador web y navegar hasta su servidor. Debería ver que da salida a los datos en formato JSON.

Conclusión Usando node.js y su módulo CSV, podemos leer y usar rápida y fácilmente los datos almacenados en el servidor y ponerlos a disposición del cliente cuando lo solicite.