Bonjour,
je vous dérange après Noël car je bloque sur un sujet que je pense très bête.
Pour un futur besoin, je dois lire un fichier CVS, récupérer la valeur de la première colonne (avec exception de la première ligne) qui me servira à nommer un fichier .txt.
Dans ce fichier nominatif je veux voir le résultat de commandes.
je souhaite voir les résultats s'afficher à l'écran (pour voir si il y a un problème déjà en phase de test) et également les enregistrer dans le fichier nominatif en tant que log.
Deux tests qui ne me donnent pas les résultats escomptés.
Fichier CSV
1er test
utilisation du module File::Tee
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 use strict; use warnings; use Data::Dumper; use feature 'say'; no warnings 'uninitialized'; use File::Tee qw(tee); use Spreadsheet::Read; my $book = ReadData ("$ARGV[0]", sep => ";"); my @rows = Spreadsheet::Read::rows($book->[1]); shift @rows; foreach my $row (@rows) { foreach my $cellule($row->[0]) { tee(STDOUT, '>', "$cellule\.txt"); print "$cellule\n"; say "toto"; say "tata"; } }
Résultat
Affiche les résultat de commandes, crée les fichier nominatifs$ perl test.pl CSV-PERL-TEST.csv
172.20.98.3
toto
tata
172.20.98.4
toto
tata
172.20.98.3.txt
172.20.98.4.txt
mais le fichier 172.20.98.3.txt (la première ligne) contient toutes les valeurs des lignes suivantes du fichier CSV.
2è test$ more 172.20.98.3.txt
172.20.98.3
toto
tata
172.20.98.4
toto
tata
Utilisation des de filehandle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 use strict; use warnings; use Data::Dumper; use feature 'say'; no warnings 'uninitialized'; use File::Tee qw(tee); use Spreadsheet::Read; my $book = ReadData ("$ARGV[0]", sep => ";"); my @rows = Spreadsheet::Read::rows($book->[1]); shift @rows; foreach my $row (@rows) { foreach my $cellule($row->[0]) { open (my $fh, '>', "$cellule\.txt") or die "Could not open file $!";; print $fh "$cellule\n"; say $fh "toto"; say $fh "tata"; } }
Résultat
Plus de lecture en STDOUT$ perl test.pl CSV-PERL-TEST.csv
Les fichiers sont bien crée nominativements et le résultat est celui recherché.
172.20.98.3.txt
172.20.98.4.txt
$ more 172.20.98.3.txt
172.20.98.3
toto
tata
La première solution me semblait la plus simple avec une copie du STDOUT dans une boucle.
Quelqu'un à déjà été confronté à ce problème ?
Merci
Partager