Filtrer les lignes d'un fichier en Groovy
Voici un exemple de ce que permet le langage Groovy, tiré d'un cas réel, dans lequel on souhaite récupérer une partie précise de certaines lignes provenant d'un fichier texte.
Ce fichier texte sert à coder des commandes d'impression qui seront interprétées par la suite pour effectuer une impression réelle.
Le but est de pouvoir récupérer le texte lisible qui se trouve sur chaque ligne commençant par le texte PrintLine
, de manière à obtenir au final une sorte d'aperçu d'impression.
Voici un extrait du fichier d'impression (où NUL
représente le caractère de code 0) :
Appliquée à un objet File
, la méthode findAll
de la GDK, prenant une Closure en argument, permet de parcourir les lignes d'un fichier tout en les filtrant.
Ainsi, dans le code ci-dessous, l'appel à findAll
permet d'obtenir une collection de toutes les lignes commençant par PrintLine
:
1 2 3 4 5 6 |
|
Note: it
est une variable implicite représentant l'élément courant.
Ensuite, en ligne 2, on construit une nouvelle collection à partir de chaque élément de la collection retournée par findAll
, en prenant sur chaque ligne, du 15ème caractère jusqu'à rencontrer le caractère de code 0.
Enfin, à la ligne 3, avec l'utilisation de la méthode join('\n')
, on obtient une chaîne de caractères constituée de tous les éléments de la dernière collection, séparés par un saut de ligne.
La valeur de la variable lines
est alors enregistrée dans un fichier (ligne 6).
J'espère que cet exemple vous aura montré combien il est facile, avec Groovy, de coder de manière lisible et dans un style déclaratif.
Je vous invite également à consulter l'excellente présentation Functional Programming with Groovy.