TP4 - Lecture de fichier (CSV)
On se propose de lire un fichier CSV dans une structure de donnée adéquate. Exemple de fichier CSV:
Titre; Auteur; Prix Chronique des atomes et des galaxies; Hubert Reeves; 16,63 Le rire de l'Ogre; Pierre Peju; Le Cycle de Cyann, t.4; Bourgeon, Lacroix; 4,25 Le parfum d'Adam; Jean-Christophe Rufin; 19
La première ligne donne le titre des colonnes. Les lignes suivantes sont des données. On aimerait lire ces données dans une structure de type liste, dont chaque élément est un hash associant le nom de la colonne à la valeur correspondante:
my @data;
...
print $data[0]->{'Titre'};
On utilisera toujours l'entrée standard et le descripteur spécial <>:
# Utilisation: perl lirecsv.pl < test.csv
my $ligne = <>; # Lit une ligne
while (<>) { print $_; } # Lit toutes les lignes jusqu'à la fin du fichier
Tri par colonne
Gérer une option du programme permettant de trier et afficher le résultat selon une colonne quelconque:
$ perl lirecsv.pl Auteur < test.csv ...
Utilisation explicite des fichiers
On veut désormais pouvoir passer explicitement une liste de fichiers à notre programme. On veut également qu'il accepte des fichiers CSV compressés avec gzip (extension gz):
$ perl lirecsv.pl test1.csv test2.csv.gz
Modifiez votre programme pour qu'il se comporte ainsi, à l'aide de l'utilisation explicite de fichiers.
Utilisation d'un module dédié
On se propose de résoudre le même problème mais en utilisant le module Text::CSV::Simple. Il vous faudra d'abord l'installer:
$ cpan Text::CSV::Simple
Répondez non à la première question, sinon vous serez débordé de questions. Vous aurez également un échec à l'installation, car vous n'êtes pas root. Modifiez le fichier ~/.cpan/CPAN/MyConfig.pm pour pouvoir installer les modules dans ~/perl ainsi:
[...] 'makepl_arg' => q[PREFIX=~/perl], [...]
Vous devrez également faire en sorte que désormais Perl aille également chercher ces modules supplémentaires, par exemple en utilisant la variable d'environnement PERL5LIB (enregistrez-le dans votre .bashrc par exemple):
$ export PERL5LIB=`pwd`/perl