Uno de los modelos de almacenamiento de datos más elementales es el archivo plano. Dentro de las funciones más básicas de una aplicación web está la de servir dichos archivos, bien construyéndolos o bien leyéndolos. Entre los tipos de archivos planos existentes el CSV es de los más utilizados por su versatilidad, ya que podemos organizar la salida de la información delimitada por caracteres especiales (donde por convención se escoge la coma como caracter de separación) .
En NodeJs podemos escribir una aplicación que nos permita construir archivos CSV haciendo uso de módulos de terceros como ya-csv.
Instalando ya-csv
1 | npm install ya-csv |
Una vez que hayamos instalado el módulo, lo implementamos en un simple script.
1 2 3 4 5 6 | var csv = require('ya-csv'); var writer = csv.createCsvFileWriter('ejemplo.csv'); var data = [['a','b','c','d','e','f','g'], ['h','i','j','k','l','m','n']]; data.forEach(function(rec) { writer.writeRecord(rec); }); |
Cambiando el delimitador
Este sencillo ejemplo nos demuestra como generar una salida básica de CSV, pero claro, las aplicaciones rara vez son básicas. ¿Que pasa si los datos contienen la coma en su mensaje?, simplemente la información a delimitar será erronea. Para solventar esto, el módulo nos pone a disposición unas opciones adicionales al momento de llamar al método createCsvFileWriter:
1 2 3 4 5 6 7 8 9 10 11 | var csv = require('ya-csv'); var writer = csv.createCsvFileWriter('ejemplo.csv', { 'separator': '~', 'quote': '|', 'escape': '|' }); var data = [['a','b','c','d','e','f','g'], ['h','i','j','k','l','m','n']]; data.forEach(function(rec) { writer.writeRecord(rec); }); |
Estas opciones incluyen el poder definir el caracter que queremos como separador, el que deseamos en lugar de las comillas y el que deseamos como caracter de escape.
Leyendo archivos CSV
El mismo módulo nos permite leer el contenido de una archivo CSV de la forma:
1 2 3 4 5 6 7 8 | var csv = require('ya-csv'); var reader = csv.createCsvFileReader('ejemplo.csv'); var data = []; reader.on('data', function(rec) { data.push(rec); }).on('end', function() { console.log(data); }); |
Manipulando CSV como un Stream
Por último, ya-csv nos permite interactuar con los archivos CSV como un Stream, esto nos permite reducir la memoria operacional, ya que el Stream procesa pequeños “trozos” de información en lugar de todo el archivo en memoria, esto es particularmente efectivo y útil cuando el CSV es grande.
1 2 3 4 5 6 7 8 9 10 | var csv = require('ya-csv'); var http = require('http'); http.createServer(function (request, response) { response.write('['); csv.createCsvFileReader('big_data.csv').on('data', function(data) { response.write(((this.parsingStatus.rows > 0) ? ',' : '') + JSON.stringify(data)); }).on('end', function() { response.end(']'); }); }).listen(8080); |
Te Puede interesar
Realiza consultas a tu Base de datos MongoDB con NodeJs
Haz caché de contenido estático con NodeJs
Supervisor, un supervisor de scripts para NodeJs