IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Listage de répertoire surréaliste


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 38
    Par défaut Listage de répertoire surréaliste
    Bon, avant que l'on dise que j'ai fumé la moquette, ou que j'abuse des mojitos au boulot, voici ce que me donne une commande DIR sous XP :
    D:\PDF2005\SOURCE>dir
    Le volume dans le lecteur D s'appelle ACERDATA
    Le numéro de série du volume est 1B2B-16F1

    Répertoire de D:\PDF2005\SOURCE

    17/02/2006 17:04 <REP> .
    17/02/2006 17:04 <REP> ..
    17/02/2006 17:01 0 Nouveau Document texte.txt
    17/02/2006 17:04 <REP> ST6809
    17/02/2006 17:04 <REP> ST6799
    17/02/2006 17:04 <REP> ST6747
    17/02/2006 17:04 <REP> ST6736
    17/02/2006 17:04 <REP> ST6728
    17/02/2006 17:04 <REP> ST6087
    17/02/2006 17:04 <REP> ST5887
    17/02/2006 17:04 <REP> ST5774
    17/02/2006 17:04 <REP> ST5773
    17/02/2006 17:04 <REP> ST5733
    17/02/2006 17:04 <REP> ST5624
    17/02/2006 17:04 <REP> ST5619
    17/02/2006 17:04 <REP> ST5605
    17/02/2006 17:04 <REP> ST5575
    17/02/2006 17:04 <REP> ST5557
    17/02/2006 17:04 <REP> ST5425
    17/02/2006 17:04 <REP> ST5408
    17/02/2006 17:04 <REP> SO3938
    1 fichier(s) 0 octets
    20 Rép(s) 3 012 067 328 octets libres

    D:\PDF2005\SOURCE>
    Maintenant le programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #!/usr/bin/perl
     
    #####################################################################################
    # Renommage en masse des fichiers PDF
    #####################################################################################
     
    use strict;     #vérifie que toutes les variables sont bien déclarées avec my
    use Carp;       #Recherche les erreurs de syntaxe dans le programme
    use warnings;
    # use utf8; 
     
    use Spreadsheet::WriteExcel; #Un module bien utile pour écrire un fichier Excel
     
    my $dossier="D:\\PDF2005\\SOURCE"; # répertoire de travail
    my @fichiers; #liste contenant ce qu'il y a dans le rép
    my $contenu; # sert à lister le contenu de la liste précédente
     
    print "Listage du contenu du répertoire $dossier\n";
    # ouverture du rép, ou message d'erreur
    opendir DIR, $dossier or die "$dossier n'existe pas !!\n";
     
    # transfert du contenu du rép dans la liste
    @fichiers = readdir DIR;
     
    # boucle pour tester si rép ou fichier
    foreach $contenu (@fichiers)
    {
      #print "Contenu : $contenu\n";
      if (-f $contenu) { print "Fichier \: $contenu\n";}
      # si fichier action
      elsif (-d $contenu) { print "Répertoire : $contenu \n"; }
      # sinon si répertoire, action
      elsif (-l $contenu) { print "lien : $contenu \n"; }
      elsif (-S $contenu) { print "socket : $contenu \n"; }
      elsif (-b $contenu) { print "block : $contenu \n"; }
      elsif (-p $contenu) { print "tube : $contenu \n"; }
      elsif (-c $contenu) { print "spéc : $contenu \n"; }
     
     
    } # fin foreach parcourant la liste $fichiers
     
    # fermeture du répertoire
    close DIR;
    et surtout sa sortie :
    D:\PDF2005>renommer.pl
    Listage du contenu du rÚpertoire D:\PDF2005\SOURCE
    RÚpertoire : .
    RÚpertoire : ..
    C'est à devenir fou !! Si je décommente print "Contenu : $contenu\n"; j'ai bien tout le contenu qui s'affiche, mais rien en répertoire ou en fichier

    En plus le premier qui dit que le code est mauvais, en fait c'est un copier/coller de ce qu'il y a dans la FAQ

    Bref, si quelqu'un y comprend quelque chose ... qu'il m'envoie des signaux de fumée !

    Usti

  2. #2
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Je soupçonne, en premier lieu, les \\ de ton chemin !!!

    Remplace tout ça par des /, Perl comprend très bien et transmet à l'OS le caractère qu'il attend.

    Ca évitera les interprétations, simples, doubles et multiples supérieures du \ comme caractère de protection de ce qui suit.

    Hop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $dossier="D:/PDF2005/SOURCE"; # répertoire de travail

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    C'est simple : tu ne testes pas les bons chemins...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (-f $contenu) { print "Fichier \: $contenu\n";}
    Là tu regardes si $contenu est dans ton répertoire courant (ben oui, $contenu c'est le nom du fichier, pas le chemin complet)

    Il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #!/usr/bin/perl
     
    #####################################################################################
    # Renommage en masse des fichiers PDF
    #####################################################################################
     
    use strict;     #vérifie que toutes les variables sont bien déclarées avec my
    use Carp;       #Recherche les erreurs de syntaxe dans le programme
    use warnings;
    # use utf8;
     
    use Spreadsheet::WriteExcel; #Un module bien utile pour écrire un fichier Excel
     
    my $dossier="D:/PDF2005/SOURCE"; # répertoire de travail
    my @fichiers; #liste contenant ce qu'il y a dans le rép
    my $contenu; # sert à lister le contenu de la liste précédente
     
    print "Listage du contenu du répertoire $dossier\n";
    # ouverture du rép, ou message d'erreur
    opendir DIR, $dossier or die "$dossier n'existe pas !!\n";
     
    # transfert du contenu du rép dans la liste
    @fichiers = readdir DIR;
     
    # boucle pour tester si rép ou fichier
    foreach $contenu (@fichiers)
    {
      my $chemin = "$dossier/$contenu";
      #print "Contenu : $contenu\n";
      if (-f $chemin) { print "Fichier \: $contenu\n";}
      # si fichier action
      elsif (-d $chemin) { print "Répertoire : $contenu \n"; }
      # sinon si répertoire, action
      elsif (-l $chemin) { print "lien : $contenu \n"; }
      elsif (-S $chemin) { print "socket : $contenu \n"; }
      elsif (-b $chemin) { print "block : $contenu \n"; }
      elsif (-p $chemin) { print "tube : $contenu \n"; }
      elsif (-c $chemin) { print "spéc : $contenu \n"; }
     
     
    } # fin foreach parcourant la liste $fichiers
     
    # fermeture du répertoire
    closedir DIR;
    --
    Jedaï

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 38
    Par défaut
    Et bien, voilà qui éclaircit ma lanterne ! Pour faire le test il faut donc rentrer le chemin complet, ce qui finalement paraît logique .

    J'ai testé avec vos corrections, et ça marche nickel !

    En fait j'avais biaisé en faisant un test sur le nom et pas sur le type, mais je vais voir peut être plutôt à faire les deux (vérifier que c'est un fichier / répertoire, et vérifier le nom).

    Usti

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. FTP sous Debian problème de listage de répertoire et sauvegarde
    Par Nikowa dans le forum Administration système
    Réponses: 0
    Dernier message: 27/03/2013, 15h11
  2. Listage de répertoire avec exportation
    Par davidcurty dans le forum Windows Vista
    Réponses: 1
    Dernier message: 22/06/2011, 13h50
  3. [MySQL] Sécuriser le listage des répertoires
    Par Alcius dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/02/2010, 20h04
  4. Réponses: 6
    Dernier message: 05/05/2009, 02h16
  5. [Tableaux] Listage de répertoire vraiment lent !
    Par Peuplarchiste dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2008, 00h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo