Avec une librairie
Le mieux pour traiter des fichiers CSV est d’utiliser une librairie, comme Text::CSV par exemple.
Voilà un petit exemple où on utilise la ligne de titre pour indexer les données :
{
my $infile = $ARGV[0] or die "Need to get CSV file on the command line\n";
open(my $in, '<', $infile) or die "Can't read file '$infile' [$!]\n";
my $csv = Text::CSV->new({
sep_char => ',',
allow_whitespace => 1, # ôte les espace en début et fin de champ.
})
or die "Cannot use Text::CSV: ".Text::CSV->error_diag();
# read the header line and register the column names
my @headings = @{$csv->getline ($in)};
$csv->column_names (\@headings);
while (my $row = $csv->getline_hr($in)) {
print "Nom: $row->{Nom} - Prénom: $row->{Prenom}\n";
}
close $in or die "Failed to close $infile ($!)";
}
On peut faire encore plus simple en utilisant $csv->getline
,
ou encore $csv->parse ($line)
puis @fields = $csv->fields ();
pour récupérer les champs.
On accède alors aux colonnes par numéro, ce qui est un peu moins pratique.
Sans librairie
Si on a un fichier CSV que l’on sait très simple (par exemple parce qu’on le génère), on peut faire encore plus simple, mais on ne profite alors pas de toutes les facilités ci-dessus :
{
open(my $fh, '<', $file) or die "Can't read file '$file' [$!]\n";
my @data;
my $line = <$fh>;
my @headings = split(/,/, $line);
print "headings:", (join (',', @headings)), "\n";
while ($line = <$fh>) {
chomp $line;
my @fields = split(/,/, $line);
push @data, \@fields;
print "Nom: $fields[3] - Prénom: $fields[4]\n";
}
close $fh or die "Failed to close $file ($!)";
}
Voir aussi :
Table des matières
Tags
ack
acronymes
analyse_statique
android
apt-get
awk
bash
bits
boot
c
checksum
coq
couleurs
css
csv
cut
dessin
diff
disque
docbook
docker
documentation
dokuwiki
dot
développement
fenêtres
firefox
frama-c
fstab
ftp
gcc
gestion_de_projet
gestion_de_version
git
graph
graphe
grep
grub
gzip
heredoc
htaccess-réseau
html
ide
ikiwiki
imagemagick
images
imprimer
ip
jenkins
js-of-ocaml
langage
latex
linux
make
mercurial
merlin
nvidia
ocaml
ocamlfind
ocamlgraph
orthographe
outil
parallel
path
pdf
perl
pgp
preuve_formelle
regexp
réseau
script
sed
sphinx
sqlite
ssh
sudo
svg
svn
syncbox
syntastic
systeme
système
tableurs
tcp-ip
texte
thunderbird
tikz
time
trac
txt2tags
ubuntu
unix
usb
utf-8
vim
virtualbox
virtualisation
vnc
web
windows
xfce
xkcd
xml
xmlstarlet
xmodmap
xsd
xslt
xubuntu
zcat
zenity
éditeur
émoticône
Dernières notes
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit