mercredi 18 février 2009
En Perl, c'est fréquent d'avoir à manipuler des fichiers textes. Une des premières choses à apprendre est l'ouverture d'un fichier et sa lecture séquentielle, c'est-à-dire ligne par ligne. Comme il y a plusieurs façons de faire, en voici trois variantes.
1. Boucle while
open(FILE_HANDLE_1, 'lyrics.lrc') ||Notions à retenir :
die ('Ouverture du fichier impossible');
while ($one_line = <FILE_HANDLE_1>) {
chomp($one_line);
if ($one_line ne '') {
# do something...
push(@lines, $one_line);
}
}
close(FILE_HANDLE_1);
- FILE_HANDLE_1 représente le nom donné à un file handler qui permet la manipulation d'un fichier. On pourra se référer à ce nom par la suite.
- À l'ouverture du fichier, si la commande échoue, on utilisera l'opérateur || pour indiquer l'instruction alternative à exécuter.
- Effectuer une boucle pour chaque ligne trouvée dans le fichier.
- La fonction chomp() permet de supprimer le saut de ligne à la fin de la chaîne de caractère.
- L'opérateur "ne" (not equal) est utilisé pour comparer des chaînes de caractères. On s'assure ici que la ligne n'est pas vide.
- On peut ensuite ajouter à l'array @lines chaque ligne lue.
- On termine en fermant le fichier.
On peut aussi utiliser un raccourci en attribuant automatiquement le file handler à une variable de type array, où chaque ligne deviendra un élément de la liste. L'objectif est atteint grâce aux deux lignes suivantes :
open(FILE_HANDLE_2, 'lyrics.lrc') ||Par contre, si on veut effectuer un traitement sur les lignes, on devra procéder à une itération sur chaque élément de la liste.
die ('Ouverture du fichier impossible');
@lines = <FILE_HANDLE_2>;
foreach (@lines) {Commentaires sur le code :
# ici, chaque ligne dans @lines se termine
# par un saut de ligne
# $_ est la valeur courante de l'itération
# dans la boucle
chomp($_);
if ($_ ne '') {
print $_ . "\n";
}
}
- En Perl, la variable $_ représente l'input par défaut lorsque la variable n'est pas explicitement déclarée (voir troisième exemple).
- Le symbole # permet de mettre une ligne en commentaire.
Dans une boucle foreach, si on préfère nommer la variable explicitement plutôt que d'utiliser $_, on peut le faire comme ceci :
foreach $one_line (@lines) {C'est aussi simple que ça.
# à la place de :
foreach (@lines) {
Justement, j'en profite pour faire un retour sur ce que j'écrivais hier concernant les ressemblances entre PHP et Perl. Ce dernier a transmis en héritage deux autres points que je n'avais pas mentionné :
- L'opérateur de concaténation est le point .
- La fonction die() pour lancer un message d'exception et terminer le programme