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 :

Demande d'aide script en Perl


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Par défaut Demande d'aide script en Perl
    Bonjour,

    Je me suis inscrit sur le site pour avoir de l'aide sur un projet de scripting en Perl qui va tourner sous AIX, ne maitrisant pas du tout je viens vous demander de l'aide, et bien sur pour aider les autres si je peux.

    Mon fichier de paramètre ressemble a :

    c:\fichiers\test\test1.txt;test1@yopmail.com
    c:\fichiers\test\test2.txt;test2@yopmail.com
    c:\fichiers\test\test3.txt;test3@yopmail.com
    c:\fichiers\test\test4.txt;test4@yopmail.com,test5@yopmail.com

    Mon script ressemble a :

    #!/usr/opt/perl5/bin/perl

    use lib "/usr/opt/perl5/lib64/5.8.8";
    use File::Copy
    use Mail::Sendmail

    # Fichier de paramètre contenant le chemin du fichier ainsi que ses destinataires
    $fp = "c:\fichiers_destinataires" ;

    # Valeurs des champs séparé par un point virgule :
    # 0: Chemin des fichiers a transférer
    # 1: Mail des destinataires selon les fichiers

    # Dossier de sauvegarde des fichiers envoyés
    $ds = "c:\dossier_sauvegarde" ;

    #Ouverture du fichier
    with open($fp) as f :

    #Lecture du fichier ligne par ligne
    for line in f :

    #Dès qu'un fichier existe et qu'il n'est pas vide il est envoyé par mail a sa liste de destinataires
    do pour_les_fichiers_qui_existe_en_paramètre_1_de_$fp et_qui_ne_sont_pas_vide
    {
    %mail = (to => paramètre_1_de_$fp
    from => serveur@yopmail.com
    subject => Fichiers
    message => Les fichiers demandés
    attach => parametre_0_de_$fp
    );
    }

    #Déplace les fichiers envoyés vers un dossier de sauvegarde
    foreach les_fichiers_qui_ont_été_envoyés
    {
    move(les_fichiers_qui_ont_été_envoyés, $ds);
    }
    close

    Il me manque pas mal de chose...

    Merci pour votre temps par avance.

    UnNoobQuiEssaye

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    pour commencer, je pense que tu as besoin de lire un bon tutoriel sur Perl. Ça tombe bien, il y en a plusieurs sur ce site. Je recommande en particulier le tutoriel de Sylvain Lhullier.

    Ci-dessous quelques commentaires sur ton code pour te faire avancer.

    Citation Envoyé par snoopsnake3 Voir le message
    #!/usr/opt/perl5/bin/perl

    use lib "/usr/opt/perl5/lib64/5.8.8";
    use File::Copy
    use Mail::Sendmail
    Il faut mettre des points-virgules à la fin des instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    use lib "/usr/opt/perl5/lib64/5.8.8";
    use File::Copy;
    use Mail::Sendmail;
    Une bonne pratique consiste à ajouter les deux pragmas suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    use strict;
    use warnings;
    Cela t'oblige à utiliser une syntaxe un peu plus stricte, mais cela permet à Perl de te signaler un bon nombre des erreurs que tu fais, et tu gagneras beaucoup de temps.

    Cela t'oblige notamment à déclarer tes variables (avec le mot-clef my). Par exemple, cette ligne:


    Citation Envoyé par snoopsnake3 Voir le message
    # Fichier de paramètre contenant le chemin du fichier ainsi que ses destinataires
    $fp = "c:\fichiers_destinataires" ;
    doit être modifiée comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # Fichier de paramètre contenant le chemin du fichier ainsi que ses destinataires
    my $fp = "c:\fichiers_destinataires" ;
    Pareil ici:
    Citation Envoyé par snoopsnake3 Voir le message
    # Dossier de sauvegarde des fichiers envoyés
    $ds = "c:\dossier_sauvegarde" ;
    à remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # Dossier de sauvegarde des fichiers envoyés
    my $ds = "c:\dossier_sauvegarde" ;
    Citation Envoyé par snoopsnake3 Voir le message
    #Ouverture du fichier
    with open($fp) as f :
    La syntaxe Perl pour ouvrir un fichier en lecture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open my $FH, "<", $fp or die "Ouverture impossible de $fp $!";
    Citation Envoyé par snoopsnake3 Voir le message
    #Lecture du fichier ligne par ligne
    for line in f :
    C'est du Perl, pas du Python. La syntaxe pour lire un fichier ligne par ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while my $line (<$FH>) { 
        # ...
    }
    Citation Envoyé par snoopsnake3 Voir le message
    #Dès qu'un fichier existe et qu'il n'est pas vide il est envoyé par mail a sa liste de destinataires
    do pour_les_fichiers_qui_existe_en_paramètre_1_de_$fp et_qui_ne_sont_pas_vide
    Là, il faut ouvrir le fichier puis le lire ligne par ligne, comme ci-dessus, et extraire les données et les stocker, par exemple, dans un hachage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my %file_list;
    while my $line (<$FH>) { 
        chomp $line;                               # enlever le caractère de fin de ligne
        my ($file, $adresse) = split /;/, line;    # extraire les deux "champs" de la ligne
        $file_list{$file} = $adresse;              # stocker les champs dans le hachage %file_list, avec le fichier comme clef et l'adresse comme valeur
    }

    Citation Envoyé par snoopsnake3 Voir le message
    {
    %mail = (to => paramètre_1_de_$fp
    from => serveur@yopmail.com
    subject => Fichiers
    message => Les fichiers demandés
    attach => parametre_0_de_$fp
    );
    }
    Il faut des virgules entre les différents éléments d'un hachage, et les valeurs doivent être entre guillemets quand ce sont des chaînes de caractères. ¨Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my %mail = ( to => $parametre_1,
                 subject => "Fichiers",
                 message => "Les fichiers demandés",
               );

    Citation Envoyé par snoopsnake3 Voir le message
    Il me manque pas mal de chose...
    En effet...

    J'espère que mes commentaires ci-dessus te permettront d'avancer, mais tu ne feras pas l'économie de commencer par lire un bon tutoriel comme celui que je t'ai proposé (ou, du moins, les 50 premières pages).

    N'hésite pas à revenir ici solliciter de l'aide quand tu auras un peu progressé dans ton code.

    PS: utilise les balises de code (#) pour tes extraits de code.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Par défaut
    Bonjour,

    Merci d'avoir pris le temps de répondre, je vais suivre vos conseils et lire le tuto sur Perl que vous avez mentionné. Puis je reviendrais vers vous avec un script un peu plus avancé je l'espère.

    Cordialement.

Discussions similaires

  1. [Batch] Demande d'aide Script BAT
    Par Loleyy dans le forum Scripts/Batch
    Réponses: 19
    Dernier message: 23/11/2016, 18h31
  2. demande d'aide en perl
    Par nanouchka dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2006, 22h04
  3. Aide script perl
    Par donmamio dans le forum Langage
    Réponses: 10
    Dernier message: 08/08/2006, 17h34
  4. script: demande d'aide
    Par imeys dans le forum Windows
    Réponses: 11
    Dernier message: 12/05/2006, 16h41
  5. [langage] Script en Perl - besoin d'aide
    Par julfra dans le forum Langage
    Réponses: 8
    Dernier message: 13/05/2004, 14h47

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