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 :

Elements d'un tableau en entrée standard


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Par défaut Elements d'un tableau en entrée standard
    Bonjour,

    Je voudrais écrire un programme en Perl qui compte le nombre d'éléments d'un tableau (que je dois remplir) et l'affiche, puis affiche élément par élément en rajoutant en précisant sa position.

    La sortie standard doit être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ~# ./Nb_elem.pl 1 2 3 4 5
            5
            1 0
            2 1
            3 2
            4 3
            5 4

    Donc jusqu'à là aucun souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/usr/local/bin/perl -w
     
    use strict;
     
    my $nb_elem = scalar(@ARGV);
    print $nb_elem."\n";
    foreach (@ARGV){
        print "$_\n";
    }
    Comme sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ~# ./Nb_elem.pl 1 2 3 4 5
            5
            1
            2
            3
            4
            5
    Le problème se pose lorsque je souhaite inclure l'index de chaque élément de mon tableau :

    C'est-à-dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/usr/local/bin/perl -w
     
    use strict;
     
    my $nb_elem = scalar(@ARGV);
    print $nb_elem."\n";
    foreach my $index (keys @ARGV){
        print "$_\n";
        print $index;
    }
    En faisant cela j'ai comme erreur :

    ~# ./Nb_elem.pl 1 2 3 4 5
    Type of arg 1 to keys must be hash (not array dereference) at ./Nb_elem.pl line 15, near "@ARGV)"
    Execution of ./Nb_elem.pl aborted due to compilation errors.
    Quelqu'un a t-il une idée svp ?

    Merci d'avance,

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Le message de Perl est très clair: keys prend pour argument un hash (et retourne la liste des clés).

    Tu aurais voulu une fonction qui retourne l'indice de la première occurrence d'un élément dans un tableau ?

    Ecris-là ou tourne-toi vers List::MoreUtils (fonction first_index()).

    Ce que tu veux faire n'est pas clair ? Est-ce juste un exercice ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print scalar @ARGV, "\n";
    for (my $i = 0; my $arg = shift @ARGV; $i++) {
    	print "$arg\t$i\n";
    }
    Ça n'a pas vraiment de sens.

  3. #3
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Ou alors tu veux indéxer les positions de toutes les occurrences de chacun des mots d'un tableau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my @data = qw(mes données en vrac sont en vrac);
    my %index;
    for (my $i = 0; my $arg = shift @data; $i++) {
    	push @{$index{$arg}}, $i;
    }
    Mais là encore pour en faire quoi ?

  4. #4
    Expert confirmé
    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
    Par défaut
    Si tu veux juste parcourir le tableau dans l'ordre et afficher index plus contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for my $i (0..$#ARGV) {
      print "$i -> $ARGV[$i]\n";
    }
    --
    Jedaï

Discussions similaires

  1. supprimer un element d'un tableau vector
    Par boby61 dans le forum SL & STL
    Réponses: 22
    Dernier message: 23/03/2005, 20h49
  2. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07
  3. Réponses: 2
    Dernier message: 21/12/2004, 15h28
  4. Réponses: 3
    Dernier message: 20/09/2004, 12h23
  5. [langage] supprimer le premier élément d'un tableau
    Par Kinethe dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2004, 15h39

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