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

Programmation et administration système Perl Discussion :

Manipulation de fichier : Unsuccessful stat on filename containing newline


Sujet :

Programmation et administration système Perl

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Par défaut Manipulation de fichier : Unsuccessful stat on filename containing newline
    Bonjour, je teste un code qui me permet d'effectuer une action (encore non déterminée...) sur des fichiers datant de plus d'un jour.

    Pour se faire, j'ai écrit le petit code suivant en Perl. C'est la première fois que j'utilise ce langage.

    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
     
     
    #!/usr/bin/perl -w
    use strict;
     
    @file=`find /export/home/hufg/logs -ctime -1`;
     
     
    foreach my $name (@file) 
    {
    	if (-f $name)
    	{
    		print $name,"\n";
    	}
    }
    Le problème vient du

    Quand je l'exécute, je reçoit comme erreur :

    Unsuccessful stat on filename containing newline at date_file_directory.pl line 12.
    Or si j'ajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $name="/export/home/hufj/logs/error.2008_12_10.log";
    Tout ce passe bien...

    Ou est ma faute?? Mon FIND me renvoi pourtant une ligne normale sans "newline" quand je l'imprime .

    Je suis certain que c'est bête mais la je vois pas..

    Merci d'avance

  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
    Fais ceci et tu comprendras mieux pourquoi ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl -w
    use strict;
     
    @file=`find /export/home/hufg/logs -ctime -1`;
    foreach my $name (@file) 
    {
    	print $name,"\n";
           # if (-f $name)
    #	{
    #		print $name,"\n";
    #	}
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Par défaut
    Global symbol "@file" requires explicit package name at test.pl line 4.
    Execution of test.pl aborted due to compilation errors.
    Donc je rajoute le "my" devant la variable.
    Je reteste et il imprime effectivement le chemin.

    Ensuite je dé-commente le code de l'exemple que tu m'a donné et j'obtiens :

    /export/home/hippoadmin/hufg/logs

    Unsuccessful stat on filename containing newline at test.pl line 8.
    Grâce au "my" il ne confond plus avec autre chose (je suppose...) mais ça ne résout pas encore mon problème

    Merci déjà djibril

  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
    As tu moyen d'installer un module sur ta machine? Si oui installe le module Date::Calc.
    Ensuite, refait ton code en Perl pure en ragardant la commande stat de Perl et la gestion des dates dans les Source Perl

    Sinon, que te donne le print de ton code. Tu peux nous mettre ici ce qu'il te retourne?
    Y a t il des espace ou autres?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Par défaut
    Il retourne ce que j'ai mis au dessus :

    /export/home/hippoadmin/hufg/logs

    Unsuccessful stat on filename containing newline at test.pl line 8.
    Donc il print le nom d'un fichier qui à été modifier il y a moins d'un jour. Le soucis est que ce fichier est un directory, et donc c'est pour ça que je teste ensuite le -f.

    Malheureusement, je ne peut installer de module et je fais avec les moyens du bord pour trouver.

    Pour lui un newline est \n ou \r c'est ça? Or ici je n'en ai pas... chez toi, cela donne la même chose (en changeant de répertoire)?

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my @file=`find /export/home/hippoadmin/hufg/logs  -ctime -1`;
    foreach my $name (@file) {
     chomp $name;
     if (-f $name) {
             print $name,"\n";
     }
    }

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Par défaut
    Djibril impeccable!

    Explication pour ceux qui liraient le sujet dans le futur :

    La fonction chomp supprime le dernier caractère s'il s'agit d'un retour à la ligne.

    Un retour à la ligne est un newline (comme \n et \r)...
    Donc en gros, c'est une erreur invisible mais bien blocante!

    Rien de grave, merci Djibril

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

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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