Node.JS ha ganado popularidad para programar aplicaciones del lado del servidor utilizando JavaScript. Parsear o leer un archivo CSV (valores separados por coma) es algo requerido muchas veces, por ejemplo, para importar datos o simplemente como medio de comunicación.
Es por eso que en este artículo explico cómo abrir, leer y parsear un archivo CSV utilizando Node.JS (el lenguaje JavaScript del lado del servidor) y un módulo llamado csv-parse que nos facilitará la tarea.
Primero hay que instalar NPM y NodeJS (o actualizarlo). Más tarde, se debe ejecutar npm install --save csv-parse
. Recuerda que si no se cuenta con un proyecto iniciado, se debe iniciar con npm init
.
Por cierto, ya se vio anteriormente cómo parsear un CSV desde PHP.
La documentación oficial está aquí.
Aquí está un ejemplo completo y funcional. Dejo el código, y más abajo lo explicamos. Lo que se hace es abrir un archivo con el módulo fs
y pasarlo a través de una tubería al parseador de CSV.
Gracias al poder de GitHub y los gists, se pueden poner todos los archivos necesarios.
/**
* Ejemplo de lectura de archivo CSV en Node.JS
*
* @author parzibyte
*/// "Importar" módulos necesarios
const fs = require('fs'); // filesystem
const csv = require('csv-parse');// Encargado de parsear
const parseador = csv({
delimiter: ',',//Delimitador, por defecto es la coma ,
cast: true, // Intentar convertir las cadenas a tipos nativos
comment: '#' // El carácter con el que comienzan las líneas de los comentarios, en caso de existir
});
parseador.on('readable', function () {
let fila;
while (fila = parseador.read()) {
console.log("Tenemos una fila:", fila);
}
});
parseador.on('error', function (err) {
console.error("Error al leer CSV:", err.message);
});
fs.createReadStream("productos.csv") // Abrir archivo
.pipe(parseador) // Pasarlo al parseador a través de una tubería
.on("end", function () {// Y al finalizar, terminar lo necesario
console.log("Se ha terminado de leer el archivo");
parseador.end();
});
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"csv-parse": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.2.0.tgz",
"integrity": "sha512-t8KGN+ZKIYUUqXznAIZ723KI3IBILImjhN8VUfAod/VCtn/IpW3R24PYCxl81g4/z4R9DruTVyvavyiw2VRLgw=="
}
}
}
{
"main": "index.js",
"dependencies": {
"csv-parse": "4.2.0"
}
}
Nombre,Precio de compra,Precio de venta,Cantidad
Mouse Logitech,400.0,500,10
# Aquí otro comentario
Xiaomi Mi A1,500.0,600,15
# Yo soy un comentario
Auriculares Sony,50.0,500,10
Galletas de chocolate,10,12,500
Por cierto, si el CSV no se ve bien haz click en view raw. Ahí está también el package.json para que se vean las dependencias. Ahora sí vamos al código.
Lo de abrir el archivo se encarga el módulo fs
; de ahí lo importante es cómo se pasa al parseador a través de pipe
. Como vemos, pasamos algunas opciones que ya tienen valores por defecto pero que es son importantes de mencionar.
true
, se intenta parsear a los tipos nativos.Más abajo se escucha al evento readable
, y se obtiene la fila. La fila es una línea del CSV y a su vez un arreglo. El arreglo, en cada índice, tiene una columna. Para este caso que es un archivo de productos, el nombre de los mismos está en fila[0]
.
Por otro lado, si se desea llevar un índice de la fila se podría poner un contador global y aumentarlo en cada llamada al evento.
Al finalizar la lectura con fs, se termina también al parseador llamando al método end
.
Puedes descargar el código del index.js con el package.json (también debes descargar el de productos.csv). Una vez que tengas instalado NPM ejecuta npm install
y luego node index.js
; lo que ejecutará el archivo e imprimirá los resultados.
Tal vez parezca un ejemplo simple, pero no lo es. Lo hice de manera sencilla para que lo puedas aplicar fácilmente en lo que sea que estés haciendo. Además, esto de leer con streams y esas cosas hace que se pueda trabajar con archivos grandes sin sacrificar el rendimiento.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.
Ver comentarios