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 :

copie automatique de fichiers


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut copie automatique de fichiers
    bonjour tout le monde,

    j'ai un problème avec mon script, j'ai un fichier C:/ERASE.TXT contenant un nombre de fichiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    c:/F20081203.txt
    %SystemRoot%/F20081023.txt
    D:/Temp/F20090110.txt
    ..etc

    je voudrai faire un script qui va parcourir C:/ERASE.TXT et effacer tous ces fichiers..sinon afficher un message "$fichier introuvable" si le fichier n'existe pas.

    au final ça sera une chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    c:/file1.txt effacer
    d:/file2.txt introuvable
    ..etc
    voici mon code qui 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
    13
    14
    15
    16
    17
    18
    #! perl
     
    use strict; 
    use warnings;
     
    open my $file,"<","C:/erase.txt" or die "fichier introuvable";
     
    while(my $line=<$file>)
    {
      if(unlink($line) == 0) 
      {
        print "$line intouvable";
      }
      else
      {
        print "$line effacer";
      }
    }
    je suis sous Windows Xp

    merci beaucoup

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Peux-tu préciser ce qui ne marche pas... ?

    Sinon, deux remarques :
    - je doutes que l'interpolation des variables du shell Windows (comme %SystemRoot% se fasse correctement)
    - il est sans doute préférable de chomper les noms de fichier avant unlink.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Peux-tu préciser ce qui ne marche pas... ?
    Bonjour et merci Philou67430, on dirai que le code ne supprime qu'un seul fichier, et le surprenant dans tout ça c'est que, quand j'appel le script une autre fois pour supprimer le fichier suivant, il ne supprime rien
    J'ai essayer comme t'as dit, t'éviter l'utilisation des variables du Shell
    %SystemRoot%..etc mais rien ne se passe..

    merci en tout cas

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Et le chomp($line) avant le if ?
    Si ton fichier est de type Windows, il peut aussi être utile de définir le séparateur de ligne avec "\r\n" en début de programme :
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Et le chomp($line) avant le if ?
    [/CODE]
    Merci Philou67430,

    problème résolu, c'était juste le chomp

    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
     
    #! perl
     
    use strict; 
    use warnings;
     
     
    open my $file,"<","erase.txt" or die "fichier introuvable";
     
    while(my $line=<$file>)
    {
      chomp($line);
     
      if(unlink($line) == 0) 
      {
        print "$line intouvable\n";
      }
      else
      {
        print "$line effacer\n";
      }
    }
    avec: contenu du fichier erase.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    c:\file test.txt
    D:\dossier\file.tmp
    ..etc
    Citation Envoyé par Philou67430 Voir le message
    il peut aussi être utile de définir le séparateur de ligne avec "\r\n" en début de programme :
    [CODE]$/ = "\r\n";
    j'ai pas compris

    @+

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je ne connais pas la valeur par défaut de ton $/, ni comment se termine tes lignes dans ton fichier, c'est pourquoi je t'ai proposé de modifier sa valeur.

    Pour comprendre, lire :
    perldoc perlvar (chercher la variable $/).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #7
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Si ton fichier est de type Windows, il peut aussi être utile de définir le séparateur de ligne avec "\r\n" en début de programme :
    S'il est sous Windows, il ne faut surtout pas qu'il redéfinisse ainsi $/ : le mode de lecture texte, qui est le défaut sous Windows traduit automatiquement les \r\n en \n en entrée et les \n en \r\n à l'écriture.

    --
    Jedaï

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Sauf s'il est sous XP/Cygwin installé avec l'option fichier texte Unix
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    perldoc perlvar (chercher la variable $/).
    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
    >> perldoc perlvar | find "$/"
    
    
            local $/; # enable localized slurp mode
            undef $/; # enable slurp mode
        executed, the global value of $/ is now changed for any other code
                local $/;
                been read from it. (Depending on the value of $/, Perl's idea of
        $/      The input record separator, newline by default. This influences
                    local $/;           # enable "slurp" mode
                Remember: the value of $/ is a string, not a regex. awk has to
                Setting $/ to a reference to an integer, scalar containing an
                    local $/ = \32768; # or \"32768", or \$var_containing_32768
                at the end of the print. Also, it's just like $/, but it's what
                          unless $this_perl =~ m/$Config{_exe}$/i;}
                          unless $secure_perl_path =~ m/$Config{_exe}$/i;}
    par contre j'ai un autre problème:
    exemple de fichier que le script ne peut pas supprimer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\Documents and Settings\Administrateur\Bureau\dod.txt
    es-ce un problème de chemins long ?

    ==> Je n'ai pas Cygwin


    @+

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je pencherais plus pour des problèmes de droit (et en second lieu pour des espaces dans le nom, bien que je pense que ce soit correctement traité par défaut).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  11. #11
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Sauf s'il est sous XP/Cygwin installé avec l'option fichier texte Unix
    Dans ce cas je lui souhaite bien du plaisir... (Je suis très fortement défavorable à l'utilisation du Perl de Cygwin, je préfère largement les solutions natives comme Active Perl ou Strawberry Perl)

    --
    Jedaï

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Y a-t-il une FAQ, ou une quelconque page qui liste les inconvénients de perl sous Cygwin, car j'avoue n'utiliser que cela, et je ne rencontre que de rares problèmes ?
    Je précise que je n'utilise pas de GUI (même si Tk est dispo), ni de programmation Win32... dans ces contextes particuliers, je suis d'accord avec ton analyse. Pour le traitement de texte en général, la programmation réseau, la programmation système, ... je n'ai pas vu de problème majeur (ou de problème tout court). J'avais même écrit une application de test qui tournait sans problème sur Solaris et WinXP/cygwin (bien sur, cela ne fait pas une généralité).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  13. #13
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Et bien tu as déjà un petit exemple de problème ci-dessus. D'un autre côté mon expérience avec Cygwin date un peu maintenant, mais il y avait tout un tas de petits problèmes de compatibilité entre le Perl de Cygwin et Windows, il n'était pas toujours évident de récupérer certains modules avec une composante XS également, j'ai pratiquement toujours eu plus de succès à compiler ces modules avec une chaîne à base de Mingw et ActivePerl, les modules qui s'attendaient à se trouver sous Unix s'installaient souvent sans problèmes sur le Perl de Cygwin mais se heurtaient ensuite aux petites différences entre Cygwin et un vrai Unix, etc...
    En fait ma critique s'applique à l'ensemble de Cygwin, je conserve toujours un cygwin sur mes installations de Windows, mais autant que possible, je préfère utiliser les adaptations Windows natives des applications Linux, lorsqu'elles existent. (Et je préfère encore un vrai Linux bien sûr, ces jours ci je ne travaille plus trop sous Windows pour être honnête)

    Disons que tant qu'à être sous Windows je préfère travailler vraiment sous Windows, pas dans un ersatz imparfait d'Unix.

    Je t'accorderais qu'il y a une part importante de préférence personnelle dans cet argument.
    --
    Jedaï

  14. #14
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    bonjour les gars

    alors est-ce que le problème de chemins dans les fichiers n'a pas de solution !

    merci beaucoup

  15. #15
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Merci pour ce retour Jedai... en fait, j'utilise Cygwin depuis très longtemps, et j'avoue qu'il s'est bien amélioré. En fait, je ne peux plus me passer de bash, find et grep, uniq, sort et diff ... du coup, comme tout est dispo, c'est vraiment plus simple que des outils indépendant.
    En plus, il y a le serveur X.
    Je ne veux pas dire que cygwin est la panacée, mais il fonctionner qu'en même assez bien. Très rares sont les modules qui ne s'installent pas avec cpan (Bioperl, mais j'ai entendu dire que c'était pareil avec n'importe quel perl).

    Concernant les fins de fichier, je doute que la solution native règle mieux les problèmes que la version cygwin : en fait, lorsque tu manipules des fichiers hétérogènes, le problème refait sans doute surface : des fichiers Unix sous Windows et inversement. Lorsque je travaillais sur des plateformes Windows ET Solaris, j'ai été confronté au problème, et la solution était bien souvent un dos2unix préalable.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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

Discussions similaires

  1. [XL-2010] Copie automatique de certaines feuilles vers un autre fichier
    Par fra7878 dans le forum Excel
    Réponses: 10
    Dernier message: 20/01/2015, 16h15
  2. [XL-2010] Copie automatique de données entre plusieurs fichiers variables
    Par panpipes dans le forum Excel
    Réponses: 0
    Dernier message: 01/04/2014, 16h21
  3. [XL-2010] Copie un automatiquement un fichier
    Par farota dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/01/2013, 11h53
  4. copie d'un fichier vers un autre serveur
    Par jexl dans le forum ASP
    Réponses: 4
    Dernier message: 20/12/2004, 16h04
  5. Génerer automatiquement plusieurs fichier .doc
    Par brunovitch dans le forum QuickReport
    Réponses: 3
    Dernier message: 09/07/2002, 08h19

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