Mise en place d'un test sur le nom d'un fichier

Mise en place d'un test sur le nom d'un fichier - Perl - Programmation

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

Reply

Marsh Posté le 10-12-2010 à 15:24:40   

Reply

Marsh Posté le 10-12-2010 à 23:18:35    

:hello:  
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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-12-2010 à 09:40:43    

Merci Gilou, j'essaye ça de suite :)

Reply

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 ? -_-

Reply

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


Message édité par gilou le 14-12-2010 à 09:56:33

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed