Création de fichiers par lot à l'aide d'un vecteur
RésoluBonjour,
Je veux créer une série de fichiers avec l'aide d'un vecteur qui renferme des éléments du nom.
Dans le programme suivant, je voudrais obtenir les fichiers :
fich-er.txt
fich-ir.txt
fich-oir.txt
#!/usr/bin/perl
use strict;
use warnings;
my $term = {"er", "ir", "oir"};
# for my $term ("er..oir")
for my $term ('er..oir')
{
system("touch fich-${term}.txt");
}
J'obtiens plutôt le fichier fich-er..oir.txt.
Que faut-il faire pour obtenir les trois fichiers?
Merci
Linux / Firefox 98.0
2 réponses
-
Modérateur
Bonjour,
Voici comment tu peux faire en perl :
#!/usr/bin/env perl use strict; use warnings FATAL => "all"; for my $term ("er", "ir", "oir") { open my $fh, ">", "fich-$term.txt"; close $fh; }Maintenant, le fait que tu évoques "touch" dans ton programme de départ me laisse penser que tu es sous Linux, et du coup un simple script shell est plus simple :
#/usr/bin/env sh for term in "er" "ir" "oir" do touch "fich-$term.txt" donePar ailleurs, si l'idée est de prendre en main perl car tu cherches un langage de script plus puissant que bash, je te conseille plutôt de t'orienter vers python, bien plus utilisé de nos jours que perl.
#/usr/bin/env python3 for term in "er", "ir", "oir": with open("fich-" + term + ".txt", "w") as f: passBonne chance
-
-
Modérateur@artagon7
Parfait, bonne continuation !
-
-
Contributeur
Bonjour artagon7 et mamiemando,
Le code Perl proposé par mamiemando fonctionne, mais écrase (en le vidant) le fichier s'il existe.
Le module File::Touch propose en Perl les fonctionnalités de touch
use File::Touch; my @files = ('one','two','three'); my $count = touch(@files);(à installer via cpan)
Voilà un code commenté montrant une façon de faire ce qu'artagon7 souhaitait faire en Perl
#!/usr/bin/perl use strict; use warnings; use File::Touch; # tableau avec les terminaisons my @term = ("er", "ir", "oir"); # tableau vide des noms de fichiers my @files; # on prend chaque élément du tableau term pour créer # le tableau des noms de fichiers foreach my $term (@term) { push(@files, "fich-$term.txt"); } # on fait un touch appliqué à tous les éléments du tableau my $count = touch(@files); print "$count files touched\n";