[perl] ouverture de fichier d'extension parti

fifto Messages postés 54 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,
J'aimerais savoir comment on programme en perl l'ouverture d'un fichier d'extension particulière dans un repertoire donné.

PAr exemple, je veux ouvrir le seul fichier d'extension *.f06 dans le repertoire /dossier1/

Et si jamais il ne trouve pas de fichier d'extension *.f06 alors il ouvre le fichier d'extension *.nas

PAr contre, si il trouve deux fichiers d'extension *.f06 dans le repertoire, il s'arrete et affiche un message d'erreur.
PAreil si il trouve deux fichiers d'extension *.nas

QQn sait-il faire ca svp ?
merci.

1 réponse

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    #! /usr/bin/perl
    
    use warnings;
    use strict;
    
    my %h;
    my $fic;
    
    opendir DIR,"." or die "E/S : $!\n";
    
    while ( defined (my $fic = readdir(DIR)) ){
      next if $fic =~ /^\.+/;
      $h{substr($fic,-3)}++;
      if ( $fic =~ /.*\.(f06)/ || $fic =~ /.*\.(nas)/){
        if ($h{$1} >1){
          die "Plusiers fichier $1\n";
        }
        else {
          open F,"$fic" or die "E/S : $!\n";
        }
      }
    }
    
    while (<F>){print} # pour test
    
    Je n'ai pas pris en compte le répertoire vide.

    lami20j

    P.S. S'il y a un fichier .f06 et un fichier .nas c'est .f06 qui sera ouvert.

    Une petite modification (teste les 2)
    #! /usr/bin/perl
    
    use warnings;
    use strict;
    
    my %h;
    my $fic;
    
    opendir DIR,"." or die "E/S : $!\n";
    
    while ( defined (my $fic = readdir(DIR)) ){
      next if $fic =~ /^\.+/;
      $h{substr($fic,-3)}++;
      if ( $fic =~ /.*\.(f06|nas)/){
        if ($h{$1} >1){
          die "Plusiers fichier $1\n";
        }
        else {
          open F,"$fic" or die "E/S : $!\n";
        }
      }
    }
    
    
    0