Création de fichiers par lot à l'aide d'un vecteur

Résolu
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 - Modifié le 11 nov. 2024 à 16:58
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 4 déc. 2024 à 19:02

Bonjour,
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

A voir également:

2 réponses

mamiemando Messages postés 33539 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 février 2025 7 828
Modifié le 12 nov. 2024 à 14:51

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"                                
done

Par 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:
        pass

Bonne chance

2
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 7
12 nov. 2024 à 19:17

Salut mamiemando,

J'ai opté pour ton script Bash. Ça fonctionne.

Merci beaucoup

0
mamiemando Messages postés 33539 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 février 2025 7 828 > artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024
13 nov. 2024 à 11:47

Parfait, bonne continuation !

0
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 1 099
Modifié le 4 déc. 2024 à 19:04

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";

0