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 :

Récupération extension fichier dans un répertoire


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut Récupération extension fichier dans un répertoire (new problem help)
    Tout d'abord un petit bonjour à tous

    J'ai un (petit) problème dans un script perl. Je dois traiter des données, mais certaines sont zippées. Bien évidemment, si c'est le cas, le programme ne peut les traiter. J'aimerais donc effectuer un test sur le type de fichier, et si celui-ci est un zip, afficher un message et arrêter le programme, afin d'éviter des messages d'erreurs incompréhensible pour l'utilisateur. Je signale que s'il y a un fichier zip, il n'y en a qu'un et un seul dans le répertoire concerné. J'ai bien ma petite idée avec la fonction substr, mais ce que je ne sais pas c'est :
    Comment récupérer le nom du fichier dans un répertoire donné?
    NB : le nom du répertoire est reçu en paramètre (saisie)


    Je débute en PERL et je ne suis pas développeur d'origine (admin réseaux).
    Merci d'avance.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($nom_de_fichier =~ /\.zip$/i) {
       die "j'ai peur des zip\n";
    }

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Merci beaucoup j'essaie ça tout de suite

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Et comment je le récupère le nom du fichier ? Je reçois en paramètre le répertoire : c:\ZIP par exemple, pas le nom du fichier. Il est inconnu. Il me faut le récupérer dans une variable, c'est ça que je ne sais pas.

  5. #5
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Pour récupérer la liste des fichiers, tu peux utiliser le module File::Glob (installé automatiquement avec Perl depuis la version 5.6.0)

    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    use strict;
    use warnings;
    use File::Glob ':globally';
     
    my $directory = "C:\\Zip"; # soit doubler l'antislash, soit utiliser un slash
    my @files = <$directory/*>;
     
    foreach my $file (@files)
    {
        if ($file =~ /\.zip$/i) {
            die "j'ai peur des zip\n";
        }
    }
    print("wé, y'avait po de zip\n");

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Ca fonctionne. Merci beaucoup

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Je me suis quand même intéressé à ce qu'a écrit djibril. Je suis tombé là dessus :
    http://www.example-code.com/perl/perl-unzip.asp

    Peut-on donc traiter les .zip dans le code perl ? Je ne comprends pas bien dans ce code là l'utilisation de la libraire Chilkat : n'est-ce pas pour les applis WEB ?

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    pour ta culture générale, sache qu'il y a des modules perl pour l'extraction de fichiers dans les repertoires compressé, tu peux toujours t'amuser :
    - Archive::Extract
    - archive::zip
    - archive::tar

    bref, y en a des tonnes, tu cherchers sur CPAN et tu trouveras

    bon courage

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Merci je vais étudier ça de près. J'ai 1 mois pour faire le projet et vu que tout fonctionne (ou presque ) je vais donc chercher à optimiser et éliminer les bugs (traitement des cas d'archive .tar ou .ace, traitement des zip dans le code PERL, etc....)

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Je ne comprends pas comment on installe les packages pour PERL. Je suis sous Windows 2000 et j'ai MINGW (afin d'essayer de travailler dans de "bonnes" conditions). Quelqu'un peut-il m'éclairer ?

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Citation Envoyé par legomaniac071
    Je ne comprends pas comment on installe les packages pour PERL. Je suis sous Windows 2000 et j'ai MINGW (afin d'essayer de travailler dans de "bonnes" conditions). Quelqu'un peut-il m'éclairer ?
    Lit la FAQ écrite par nos soins

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Apparement il n'y aura jamais de .TAR ou .ACE et le .ZIP était une exception (mais ne doit-on pas gérer en programmation les exceptions, même les plus improbables ???). Mais bon, j'oublie ça quelque temps car j'ai un nouveau problème :
    J'ai maintenant besoin de récupérer une partie du nom d'un fichier afin de la copier dans le bon répertoire. Exemple :
    Dans le répertoire c:\TxTx on a :
    N_TOTO_DGI_253.bat qui doit être copié dans le répertoire TOTO
    N_TITI_DGI_458.txt qui doit être copié dans le répertoire TITI
    N_TITI_DGI_NNN.sh qui doit aussi être copié dans TITI
    N_TATATATA_DGI_jjj.lo qui doit être copié dans le répertoire TATATATA

    La partie à récupérer, ici TOTO ou TITI etc...., n'est pas de longueur fixe mais se trouvera toujours entre N_ et _DGI (normalisation). J'en ai besoin pour effectuer ensuite une comparaison et le copier dans le bon répertoire en fontion du résultat. Je compte faire ça en PERL car je suis à peu près sûr que c'est impossible en BATCH. Je dois donc dans un premier temps récupérer le nom de chaque fichier du répertoire (ça je pense m'en sortir : parcours du répertoire et récupération du nom du fichier) et extraire la partie du nom du fichier que je veux (là ça coince). Ensuite le test "if" je m'en sortirai sans problème je pense. J'ai cherché sur votre forum mais je n'ai pas trouvé de topic traitant de cela j'espère que c'est bien le cas

  13. #13
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    une petite regex t'aurais fait l'affaire (une fois de plus confere FAQ )
    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
     
    #!/usr/bin/perl -w
    use strict;
    use Carp;
    use File::Glob ':globally';
     
    my $directory = "C:\\Zip"; # soit doubler l'antislash, soit utiliser un slash
    my @files = <$directory/*>;
    my %mes_repertoires=("toto"=>"chemin_rep_toto","titi"=>"chemin_rep_titi", "tutu"=>"chemin_rep_tutu");
     
     
    foreach my $file (@files)
    {
        if ($file =~ /\.zip$/i) {
            die "j'ai peur des zip\n";
        }
        foreach my $type_rep (keys %mes_repertoires ) {
            $type_rep = "N_".$type_rep."_DIG";
            if ($file =~ /$type_rep/i) {
                print "$file doit etre envoyé vers le repertoire $mes_repertoires{$type_rep};
                #rename($file,$mes_repertoires{$type_rep}); #envoyer le fichier dans le nouveau repertoire
            }
        }
    }
    print("wé, y'avait po de zip\n");

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Merci je suis sur la bonne voie grâce à ce bout de code.

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Ca fonctionne depuis ce matin. Super, merci beaucoup. J'espère pouvoir vous rendre la pareil un jour (pas en développement je pense hélas )

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/06/2015, 00h44
  2. Réponses: 5
    Dernier message: 01/12/2011, 14h48
  3. [WD14] Lister les extensions de fichier dans un répertoire
    Par LuckyLuke56 dans le forum WinDev
    Réponses: 20
    Dernier message: 01/08/2011, 17h02
  4. Récupération nom des fichiers dans un répertoire
    Par oliviernouhi dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2011, 14h21
  5. Récupération du noms des fichiers dans un répertoire
    Par tulipelover dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 03/08/2008, 21h47

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