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

Nom : CSV.png
Affichages : 153
Taille : 2,3 Ko


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

$ perl test.pl CSV-PERL-TEST.csv
172.20.98.3
toto
tata
172.20.98.4
toto
tata
Affiche les résultat de commandes, crée les fichier nominatifs
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.
$ more 172.20.98.3.txt
172.20.98.3
toto
tata
172.20.98.4
toto
tata
2è test
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
$ perl test.pl CSV-PERL-TEST.csv
Plus de lecture en STDOUT

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