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

Modules Perl Discussion :

module Archive :: Extract


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 16
    Par défaut module Archive :: Extract
    Bonjour,
    je veux extraire des archives tar.gz, j'en ai une grande quantité et j'ai fait un script qui me trouble par son comportement.
    Tous les fichiers sont dans un repertoire C:/source
    J'ai mis les fichiers à compresser dans un tableau @LesFichiers
    le 1er, donc $LesFichiers[0] s'appelle compress.log.gz


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use Archive::Extract;
     
    $LECTEUR="C:/";
    $DEST = "$LECTEUR"."temp";
    $SYSLOG="$LECTEUR"."Source"; 
     
    my $ae = Archive::Extract ->new( archive => "$SYSLOG"."/compress.log.gz");
    my $ok = $ae -> extract( to => "$DEST") or die $ae -> error;
     
    print "OK";
    Ce programme marche


    Maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    use Archive::Extract;
     
    $LECTEUR="C:/";
    $DEST = "$LECTEUR"."temp";
    $SYSLOG="$LECTEUR"."Source"; 
    $i=0;
    print "$SYSLOG"."$LesFichiers[$i]";
    print "$SYSLOG"."/compress.log.gz\n" ;
     
    my $ae = Archive::Extract ->new( archive => "$SYSLOG"."$LesFichiers[$i]");
    my $ok = $ae -> extract( to => "$DEST") or die $ae -> error;
     
    print "OK";
    Ne marche pas, c'est très bizarre je trouve
    Les 2 prints des chemins de fichiers indique la même chose

    une idée serait le bienvenue !
    merci !

  2. #2
    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
    $SYSLOG_DIR n'existe nulle part.
    Pense à mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use strict; 
    use warnings;
    en début du script, ça t'aidera grandement.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 16
    Par défaut
    ok tu avais raison, mais ce n'est pas vraiment le pb, (j'ai mis ce que tu as dis mais plus haut dans mon code)
    je l'ai un peu retouché mais j'ai toujours le même résultat
    les adresses de mes fichiers sont dans $LesFichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $i=0;
    print "$LesFichiers[$i]";
    print "C:/compress.log.gz\n" ;
     
     
    $ae = Archive::Extract ->new( archive => $LesFichiers[$i]);
     
    $ok = $ae -> extract( to => "$DEST") or die $ae -> error;
     
    print "OK";
    les 2 prints indiquent la même chose
    ce code ne fonctionne pas. En fait je peux décompresser uniquement en rentrant explicitement l'adresse de mon fichier. (mon but est de faire une boucle)

  4. #4
    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
    Au vu de ton script, tu n'as absolument rien changé.
    Le mieux serait de nous mettre le code complet.

  5. #5
    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
    Le constructeur du module attend que tu lui fournisse ton archive ($LesFichiers[$i]).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $ae = Archive::Extract ->new( archive => $LesFichiers[$i]);
    Ensuite il extrait les fichiers vers le répertoire qui tu lui as désigné ($DEST).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $ok = $ae->extract( to => $DEST) or die $ae -> error;
    Pour avoir les adresses de ces fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $files_ref  = $ae->files;
     
    # Afficher les fichiers
    foreach my $fichier ( @{$files_ref} ) {
      print "- $fichier\n";
    }

  6. #6
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 16
    Par défaut
    OK pour ton explication,
    si tu veux bien voici la partie nécessaire du code :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #!/usr/local/bin/perl
     
    use DBI;
    use strict;
    use warnings;
     
    my $LECTEUR="C:\\"; # lecteur d'installation
    my $SYSLOG_DIR="$LECTEUR"."Source"; # répertoire d'installation du fichier syslog à analyser
     
    print "Ouverture du repertoire $SYSLOG_DIR\n";
    opendir (SYSLOGDIR,$SYSLOG_DIR) or die "Impossible d'ouvrir $SYSLOG_DIR";
     
    # ------------------------------------------------------------------------------------------------
    # Fonction lister les fichiers contenus dans $SYSLOG_DIR
    # le nom des fichiers est dans une table : @LesFichiers
    # ------------------------------------------------------------------------------------------------
     
    my @LesFichiers = ListersFichiers($SYSLOG_DIR);
    print "les fichiers a traiter sont :\n";
    print "@LesFichiers";
    my $NbrFichiers = @LesFichiers;
     
    print " Il y a $NbrFichiers fichiers log dans le repertoire\n";
     
     
    sub ListersFichiers
     {
      my ( $SYSLOG_DIR ) = @_;
      my @fichiers;
     
      # Liste fichiers et répertoire sauf (. et ..)
      my @Contenu = grep { !/^\.\.?$/ } readdir(SYSLOGDIR);
     
      # Fermeture du répertoire
      closedir (SYSLOGDIR);
     
      # On récupère tous les fichiers
      foreach my $nom ( @Contenu )
            {
          push ( @fichiers, $SYSLOG_DIR."/$nom\n" );
            }
      return @fichiers;
      }
     
    #------------------------------------------------------------------------------
    #           décompresser fichiers, copie dans C:/temp
    #------------------------------------------------------------------------------
     
    use Archive::Extract;
     
    my $DEST = "$LECTEUR"."/temp";
     
    & ExtraireFichier;
     
    sub ExtraireFichier{
     
    ## je vérifie que les 2 adresses sont les mêmes pour i=0
    my $i=0;
    print "$LesFichiers[$i]\n";
    print "$SYSLOG_DIR"."/compress.log.gz\n" ;
     
    # la je voudrais mettre une boucle pour tous les $i de $LesFichiers
     
    my $ae = Archive::Extract ->new( archive => "$SYSLOG_DIR"."/compress.log.gz");
    #my $ae = Archive::Extract ->new( archive => $LesFichiers[$i]);
     
    # A la place de "$SYSLOG_DIR"."/compress.log.gz" je voudrais $LesFichiers[$i]
     
    my $ok = $ae -> extract( to => "$DEST") or die $ae -> error;
    print "OK";
     
    my $files_ref  = $ae->files;
    # Afficher les fichiers
    foreach my $fichier ( @{$files_ref} ) {
      print "- $fichier\n";
    }}
    ca marche bien mais uniquement si je donne directement le nom du fichier ( au lieux de le chercher dans une table)

    sacré casse tête quand même...
    merci pour ton temps et ta patience

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/04/2012, 21h32
  2. Archive::Extract - out of memory
    Par nikita006 dans le forum Modules
    Réponses: 6
    Dernier message: 02/12/2010, 14h58
  3. 7-Zip - Créer un archive auto-extractible.exe
    Par Edoxituz dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 29/07/2006, 16h27

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