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 :

"multitération" Python Perl


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut "multitération" Python Perl
    Bonjour,

    Je suis en train de faire la réécriture d'un projet Python en Perl et j'ai un problème de "multitération" je souhaite itérer les indices de plusieurs tableaux en même temps, (pas de boucles imbriquées).

    En Python, j'ai trouvé la solution, mais en Perl je ne sais pas comment faire.

    merci.

    Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tab = zip(tabimg, tabphrase)
     
    BD = open("Bande dessinée.html", "a")
    for src, alt in tab:
        BD.write("            <img src=\"img/{}\" alt=\"{}\">\n".format(src, alt))
    BD.close
    Perl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    my @tab = zip(@tabimg, @tabphrase);
    open (BD, ">> Bande dessinée.html") or die ("oups !");
    foreach my $src, $alt (@tab)
    {
        print "            <img src=\"img/$src\" alt=\"$alt\">\n";
    }
    close(BD);

  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
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Ceci devrait convenir, je pense:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for my $i (0..$#tabimg) {
         print "            <img src=\"img/$tabimg[$i]\" alt=\"$tabphrase[$i]\">\n";
    }
    Ou peut-être pourrais-tu simplifier tes guillemets comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for my $i (0..$#tabimg) {
         print qq{            <img src="img/$tabimg[$i]" alt="$tabphrase[$i]">\n};
    }
    Autre solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for my $src (@tabimg) {
         print qq{            <img src="img/$tabimg[$i]" alt="}, shift @tabphrase, qq{">\n};
    Mais cette dernière solution vide le tableau @tabphrase, ce qui est gênant seulement si tu en as encore besoin ailleurs dans ton code.

    Je n'ai pas testé les bouts de code ci-dessus, mais je pense que ça devrait marcher.

    Sinon, la troisième partie de mon tutoriel sur la programmation fonctionnelle montre comment travailler sur deux listes en même temps. Mais ce serait certainement du overkill que d'utiliser cette méthode pour ton cas très simple.

    Enfin, il y a le module Lists::MoreUtils, qui contient les fonctions each_arrayref et each_array répondant sans doute à ton besoin.

  3. #3
    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
    Regarde le module List::MoreUtils qui contient plusieurs fonctions qui vont répondre à ta demande :
    - zip/mesh (solution à peu près identique à celle écrite en Python, il te faut par contre un l'itérateur adapté qui lit autant de valeurs dans la tableau que de tables fusionnées)
    - each_array : l'itérateur qu'il te faut
    - pairwise : un opérateur programmable de fusion de 2 tables
    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

  4. #4
    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
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    J'avais déjà mentionné le module Lists::MoreUtils dans ma réponse, mais dans ce cas précis, la solution en Perl de base est tellement simple que je doute de l'intérêt de chercher des complications. Un marteau-pilon n'est pas forcément la solution la plus efficace pour tuer un moustique.

  5. #5
    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
    Ooops, je n'avais pas tout lu.
    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

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