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 :

Probléme taille tableau


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Par défaut Probléme taille tableau
    Bonjour à tous ,

    Voilà j'ai un petit soucis concernant la taille d'un tableau quand je le passe en paramétre d'une fonction , voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     my $pathDirectory = $saisie."\\".$directory;
    	#print "$pathDirectory\n";
    	my @Files = GetFilesList ($pathDirectory);
     
    	#foreach my $filetest (@Files){
     
    	#print "$filetest\n"
    	#}
     
    	my $sizeArray = @Files ;
    	print "$sizeArray\n"; #tableau vaut 3 résultat que j'attend .
    	envoiMail(lc $email,@Files);
    Code de la fonction envoiMail

    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
     
     
    sub envoiMail{
     
    my $destinataire =  $_[0]; #param 1
    my @attachments = $_[1]; #param 2
     
    my $size = @attachments;
     
     
     
    print "$size\n"; #Mon tableau ne fait que 1 de taille
     
     
     
    }
    Je ne comprends pourquoi mon tableau passe à 1 de taille , est ce que quelqu'un serait m'expliquer d'ou vient le probléme ?

    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Par défaut
    Le tableau @Files est aplati lors de l'envoi à la fonction envoiMail(..); (il devient une liste de scalaires)
    Il faut modifier la façon de récupérer le tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub envoiMail{
     
    my ( $destinataire , @attachments ) =  @_;
     
    my $size = @attachments;
     
    print "$size\n"; #Mon tableau ne fait que 1 de taille
    }
    Ou voir pour le passage du tableau par référence ce qui sera plus performant dans le cas d'un grand tableau.


    edit : je n'ai pas testé le code ci-dessus mais une recherche google te permettra d'en apprendre plus.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Par défaut
    Ok , merci. Je vais tester ça .

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Par défaut
    Citation Envoyé par JeanMi3000 Voir le message
    Le tableau @Files est aplati lors de l'envoi à la fonction envoiMail(..); (il devient une liste de scalaires)
    Il faut modifier la façon de récupérer le tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub envoiMail{
     
    my ( $destinataire , @attachments ) =  @_;
     
    my $size = @attachments;
     
    print "$size\n"; #Mon tableau ne fait que 1 de taille
    }
    Ou voir pour le passage du tableau par référence ce qui sera plus performant dans le cas d'un grand tableau.


    edit : je n'ai pas testé le code ci-dessus mais une recherche google te permettra d'en apprendre plus.

    Ce que je comprends pas , c'est que si j'enleve $destinataire de ce que tu as mis sa met que la size de mon tableau vaut 4 . Je débute et je comprends pas vraiment ce que fait cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ( $destinataire , @attachments ) =  @_;

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Par défaut
    Citation Envoyé par Seb2913 Voir le message
    Ce que je comprends pas , c'est que si j'enleve $destinataire de ce que tu as mis sa met que la size de mon tableau vaut 4 . Je débute et je comprends pas vraiment ce que fait cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ( $destinataire , @attachments ) =  @_;
    cette ligne permet de récupérer tous les arguments envoyés à la fonction et de les affecter directement aux variables entre parenthèses.
    Le tableau @_ va être 'dépilé', son premier élément sera affecté à $destinataire, et tous ses éléments restant à @attachments.


    exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foo( "val1", 2, "val2", "val3", 4)
     
    sub foo{
    my ($data1, $data2, $data3, $data4, $data5) = @_;
    //récupère toutes les valeurs dans des variables différentes
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foo( "val1", 2, "val2", "val3", 4)
     
    sub foo{
    my ($data1, $data2, @datas) = @_;
    //récupère toutes les valeurs dans $data1 et $data2 et met le reste des éléments existants et envoyés en paramètre à la fonction dans le tableau @datas
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foo( "val1", 2, "val2", "val3", 4)
     
    sub foo{
    my (@datas1, @datas2) = @_;
    //récupère toutes les valeurs envoyées en paramètres et les met dans le tableau @datas1
    //@datas2 sera vide dans ce cas
    //voir pour le passage par référence pour ce genre de cas
    }

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Par défaut
    Ah d'accord , sa ne fonctionne pas un paramétre = une variable ou un tableau si j'ai bien compris ton explication :

    si je passe en paramétre un tableau et que dans la fonction , j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    my($variable , @tab) = @_ ;
    $variable = 1er element tableau et le reste du tableau dans @tab

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Par défaut
    Pour cette partie du code , j'ai le meme soucis car je dois utilisé la mauvaise syntaxe ou que je m'y prends mal car @parts , je me retrouve avec un élément aussi.

    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
     
     
    #
    #FUNCTIONS
    #
    sub envoiMail{
     
    my ($destinataire, @attachments) = @_;
    #my $destinataire =  $_[0]; #param 1
    #my @attachments = @_[1]; #param 2
     
     
    #print "$data1\n";
    #print "***$data2***\n";
    my @parts = ();
     
     
     
    #CONFIGURATION SMTP
    my $transport = Email::Sender::Transport::SMTP->new(
    		host=>'***************',
    		port=>'25',
    		username=>'*******************',
    		password=>'*********',
    		);
     
     
    #ATTACHMENTS
    foreach my $attachment (@attachments){
     
    my @splitExtension = split(/./,$attachment);
    my @splitNomFichier = split(/\\/,$attachment);
     
    #my $nomFichier = @splitNomFichier[2];
    #my $extension = @splitExtension[1];
     
    #print "### $attachment ###\n";
     
     my $attachment_object = Email::MIME->create(
            attributes => {
                filename     => "test",
                content_type => "application/pdf",
                encoding     => "base64",
                disposition  => "attachment",
                name         => "test.pdf",
            },
     
            body => io($attachment)->all,
        );
     
    	 @parts = ($attachment_object);
     
    }

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

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