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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    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";
    }
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

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

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    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 éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    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");

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

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

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Heu, désolé mais en fait, bien que cela fonctionne, ça n'arrête que le programme PERL donc ça ne solutionne pas complètement mon problème . Je m'explique :
    J'ai donc ce programme PERL, qui s'arrête bien s'il trouve un fichier .ZIP dans le répertoire. Mais comme ce prog est appelé depuis un script BATCH, la suite du script BATCH elle s'effectue, provoquant des erreurs (la suite du BATCH a besoin des données traitées par mon prog PERL). J'aimerais donc savoir si c'est possible d'arrêter l'éxecution du BATCH depuis PERL. Merci d'avance. Merci.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Alors, ce qu'il faut savoir:
    • un die en perl renvoie un code d'erreur 255
    • une sortie normale du programme renvoie un code d'erreur 0


    Il te suffit donc de faire appel au script perl depuis un script batch pour faire ce que tu veux:
    Code du fichier batch : 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
     
    # désactivation de l'affichage des commandes autres que echo
    @echo off
    # execution du programme en lui passant le nom de dossier en paramètre
    perl monscript.pl %1
    # en fonction du résultat, on va atteindre un label
    goto error%errorlevel%
     
    # erreur255 : un die ! on va à la fin
    :error255
    echo "aie je suis mort"
    goto end
     
    # erreur 0  :pas de die, on peut traiter
    :error0
    echo "on peut continuer"
    # traitement
    goto end
     
    :end
    echo fini!

    Et un p'tit lien en prime pour écrire des fichiers Batch:
    Microsoft Windows XP - Batch Files

    Voilà

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merci J'étais sur la bonne voie, mais je ne connaissais pas les codes d'erreurs. Et comme je l'ai dis, je ne suis pas développeur d'origine....Je fais ça en complément, à l'occasion.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    De rien, n'oublie pas,

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  11. #11
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    La solution quitte après avoir vu le premier zip et ne traitera pas les autres fichiers qui ne sont pas zippés. De mon point de vue, ça semble incorrect. Quand tu dis qu'il n'y aura qu'un seul fichier Zip, veux-tu dire que le fichier Zip sera la seul fichier du répertoire ou qu'il n'y aura aucun autre fichier Zip?

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Voilà c'est fait !!
    Je suis certain qu'il n'y aura qu'un seul fichier ZIP dans un répertoire donné. Ca c'est certain. Donc le code est correct. En fait, il s'agit du traitement des mises à jour du cadastre des communes, donc elles sont rangées dans des répertoires contenant leurs numéro INSEE. Un répertoire=une commune. S'il les fichiers de MAJ sont zippés, il n'y a donc qu'un seul .ZIP contenant les fichiers de MAJ dans le répertoire. Voilà !!

    Merci beaucoup à tous. C'est super ici

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    J'ai trouvé un dézippeur DOS (PKZIP) qui me permet maintant, en plus, de dézipper à la volée en cas de présence d'un fichier ZIP (j'appelle PKZIP en lui passant le nom de fichier en récupérant le résultat de la commande DIR dans une variable). Tout est parfait grâce à votre code . Il me reste plus qu'à croiser des doigts pour que les communes n'utilisent pas d'autres format de compression (RAR, ACE....) sinon aie.
    Encore merci

  14. #14
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    sinon il est possible de recuperer les fichier zippés ou taré (compressés) en Perl tu sais !! Tant qu'à faire, autant utiliser la même technologie

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par djibril
    sinon il est possible de recuperer les fichier zippés ou taré (compressés) en Perl tu sais !! Tant qu'à faire, autant utiliser la même technologie
    Boarf, si ça l'oblige à rajouter 50 lignes de code, à installer un module dédié et à se plonger dans le code alors qu'il n'est pas développeur à l'origine, je ne vois pas l'intêret...

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Effectivement je me vois mal faire ça . Et puis en général, je ne cherche pas à réinventer la roue : si un utilitaire Free ou une fonction prédéfinie dans un langage existe et fait exactement ce que je veux, je ne vais pas chercher à le "re"-développer pour arriver à la même chose. PKZIP fonctionne très bien, je l'appelle depuis mon BATCH, parfait. Mais il est vrai que je me retrouve bloqué en cas de fichier .ace ou .rar. Mais je doute que les communes utilisent ce genre de logiciel de compression somme toute peu connus des non-initiés.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    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 ?

  18. #18
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    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....)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 13
    Points
    13
    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 ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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