Node CSV version 0.2.1

Node CSV version 0.2.1

By WORMS David

26 juil. 2012

Faisant suite à l’annonce de la version 0.2.0 du parser CSV pour Node.js début octobre, aujourd’hui sort la nouvelle version 0.2.1. Il s’agit essentiellement d’une distribution corrigeant des bugs. Toutefois, quelques fonctionnalités intéressantes ont trouvé leur chemin. La documentation du parser a été mise à jour pour refléter ces changements.

Utilisation des évènements pause/resume dans les flux de données

Voir GitHub issue #52 et issue #54.
Merci à Dan Kearns pour avoir découvert ce bug ainsi qu’à Doug Wilson pour fournir cette superbe “pull request”. C’est une correction importante et implique que tous les utilisateurs de la version 0.2.0 soient encouragés à migrer vers cette nouvelle version.

Transformations asynchrones

Voir GitHub issue #30.
Il semblerait que ce fut la fonctionnalité la plus demandée ces derniers jours. Le parser CSV peut désormais accepter deux types de callbacks, synchrones as asynchrones. La distinction se fait en fonction de la signature de ses arguments. Le callback sera appelé en mode asynchrone s’il est défini avec trois paramètres, autrement il sera appelé en mode synchrone. Les exemples suivant illustrent ces deux modes en renversant les colonnes de chaque ligne.

Exemple synchrone :

csv()
.from('a,b\n1,2')
.to(console.log)
.transform (data, index, callback) ->
  data.reverse()

Exemple asynchrone :

csv()
.from('a,b\n1,2')
.to(console.log)
.transform (data, index, callback) ->
  process.nextTick ->
    callback null, data.reverse()

Numéro de ligne dans les erreurs du parseur

Voir GitHub issue #40.
Merci à E. Timothy Uy pour avoir remonté cette demande. L’idée est d’améliorer les messages d’erreur au sein du parseur avec le numéro de la ligne en cours. De plus, une nouvelle propriété est accessible à l’adresse csv().parser.lines.

Association entre la propriété d’une colonne et son nom

Voir GitHub issue #53.
Cette fonctionnalité revient à Alex Zylman qui avait besoin d’une manière pour afficher ses propres noms de colonnes en sortie. La solution retenue fut de permettre aux options from.options.columns et to.options.columns d’être définies en tant qu’objets. Voici un exemple :

data = 'field1,field2,field3\nval1,val2,val3'
csv()
.from(data, columns: true)
.to (data) ->
  data.should.eql 'column1,column3\nval1,val3'
  next()
, columns: {field1: 'column1', field3: 'column3'}, header: true

Prise en compte de l’UTF BOM

Voir GitHub issue #36 et issue #55.
Cette fonctionnalité a été remontée par E. Timothy Uy](https://github.com/tofutim) et implémenté par Doug Wilson.

Mise à jour de la documentation

Voir GitHub issue #56.
Merci à Kevin Old qui a pris le temps de passer sur chacun des exemples afin de les aligner avec les changements d’API apportés par la version 0.2.0.

Compatibilité avec Node.js < 0.8.x

Il s’agit d’un bug introduit lors de la mise à jour 0.2.0 et de la migration vers Node.js en version 0.8. la fonction path.exists est renommée fs.exists. La correction fut simple et consiste à créer une fonction fs.exists si celle-ci n’existe pas. Voici un extrait du code source :

fs = require 'fs'
path = require 'path'
fs.exists ?= path.exists

Et même plus…

D’autres améliorations telles que rapportées par le fichier de changements sont :

  • Transmettre les options dans les fonctions from and to
  • La fonction to.string reçoit le nombre d’éléments écrits
  • Correction de from.array en association avec l’option “column”
  • Intégration avec Travis
  • Plus de documentation, particulièrement au sujet des colonnes et des transformations

Canada - Morocco - France

International locations

10 rue de la Kasbah
2393 Rabbat
Canada

Nous sommes une équipe passionnées par l'Open Source, le Big Data et les technologies associées telles que le Cloud, le Data Engineering, la Data Sciencem le DevOps…

Nous fournissons à nos clients un savoir faire reconnu sur la manière d'utiliser les technologies pour convertir leurs cas d'usage en projets exploités en production, sur la façon de réduire les coûts et d'accélérer les livraisons de nouvelles fonctionnalités.

Si vous appréciez la qualité de nos publications, nous vous invitons à nous contacter en vue de coopérer ensemble.