wiki:InsiaProgPerlTp4

Sommaire

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
Last modified 13 years ago Last modified on Mar 5, 2007, 1:51:31 PM