Mise en place d'un test sur le nom d'un fichier - Perl - Programmation
Marsh Posté le 10-12-2010 à 23:18:35
if ($chaine =~ /^TOTO/) pour tester si une chaine commence par TOTO
if ($chaine !~ /^TOTO/) pour tester si une chaine ne commence pas par TOTO
A+,
Marsh Posté le 13-12-2010 à 10:20:29
En fait je ne vois pas trop comment implémenter ça à mon script, je pense que cela se ferai à cette ligne :
foreach (<$Repertoire/*.txt> )
Comme vous le voyez sans doute, cette ligne prend tous les .txt dans $Repertoire.
Comment y ajouter les 2 tests maintenant ?
J'amagine pouvoir faire ça pour tester la présence de la chaine :
foreach (<$Repertoire/TOTO*.txt> )
Mais comment tester la NON présence de TOTO ? -_-
Marsh Posté le 14-12-2010 à 09:53:45
<$Repertoire/*.txt> est à éviter: les opérateurs <> ne devraient pas être employés pour faire du file globbing: http://dev.perl.org/perl6/rfc/34.html
(C'est une recommandation pour le perl 6 certes, mais dont les origines viennent de pbs avec les versions antérieures, en particulier si un fichier listé n'a pas les droits suffisants en ouverture il me semble.)
Il suffit de faire un
my @files = grep /^TOTO/, glob("$Repertoire/*.txt" ) ;
et pour l'autre cas
my @files = grep !/^TOTO/, glob("$Repertoire/*.txt" ) ;
Pour obtenir la liste des fichier voulus, et ensuite faire une boucle de lecture sur ces fichiers
foreach my $file (@files) {
open (my $handler, "<", $file) or die $!;
while (<$handler> ) {
...
}
close ($handler);
}
A+,
Marsh Posté le 10-12-2010 à 15:24:40
Bonjour,
je suis débutant extrême en Perl, et voici ma question.
J'ai 2 traitements Perl qui vont chacun chercher des fichiers dans le même répertoire.
Mon soucis est qu'un des traitements doit prendre tous les fichiers commençant par la chaîne de caractère "TOTO", et l'autre doit traiter tous les fichiers ne commençant pas par "TOTO".
Comment puis-je ajouter ces 2 conditions dans mes scripts ? j'imagine que c'est assez simple mais je ne suis vraiment pas à l'aise là-dedans...
Merci d'avance