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 :

Recuperer les valeurs d'un tableau dont le nom est dans une chaine de caractere.


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Recuperer les valeurs d'un tableau dont le nom est dans une chaine de caractere.
    Bonjour a tous,

    Je me heurte depuis quelques jours a ce probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    my @tableau = (1,2,3,4);
     
    my $string = "tableau";
     
    @valeurs = recuperer_valeurs($string)
     
    sub recuperer_valeurs ()
    {
     
    	#  input :  string contient le nom du tableau 
     
    	# output : @tableau = (1,2,3,4);
    }
    Please help !!
    Cheers, Nico.

  2. #2
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Nom tableau dans une chaine de caractere.
    En fait pour etre un peu plus precis :

    J'ai le code suivant :
    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
     
    my @tableau = (1,2,3,4);
    my $string = "tableau";
     
    @valeurs = recuperer_valeurs($string);       
     
    foreach my $val (@valeurs)
    {
    	print $val . "\n";            # Afficher ttes les valeurs du tableau. 
    }
     
    sleep;
     
    sub recuperer_valeurs()
    {
    	 $string = "\@" . $_[0];          # Input : une chaine de caractere
    	 my @valeurs;
     
     
    	 foreach $val (@$string)            #Ca ne marche pas. 
    	 {
    		push (@valeurs, $valeur);
    	 } 
    	 return @valeurs;     #Doit retourner les valeurs 
                                             #du tableau en variable globale. 
    }
    Le but (tel qu'il est le script ne sert pas a grand chose, mais dans son context heureusement ... si). Je souhaiterais recuperer les valeurs d'une table en variable globale juste a partir de son nom contenu dans une chaine de caractere.

    PLEASE Help.

  3. #3
    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
    Il est préférable d'utiliser un hash pour faire ceci, ou pourquoi ne pas simplement passer le tableau en argument plutôt que son nom ?
    Ce que tu demandes est possible, mais c'est une très mauvaise idée pour la maintenance et la robustesse de l'application.

    --
    Jedaï

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour Jedai,

    Merci pour ta reponse, ...
    Cependant, je n'ai pas vraiment le choix :

    _ J'ai un fichier annexe appele en debut de programme avec
    require fichier_annexe.pl
    contenant une centaine de table du type
    @ls = (1,2,3,...);
    @printf("Affiche", 2, "no", "");
    @eval("val", 2, "no");

    _ Je recupere un string contenant une ligne de commande a l'entree de mon programme.

    _ En fonction de la commande je dois recuperer les valeurs de la table,

    Ex :

    Commande : $string = "mkdir toto";
    Table : @mkdir = ("Creer un repertoire", "nom_rep", 3);

    Comment faire pour recuperer le bon tableau a partir de son nom ?

  5. #5
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Février 2007
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    Même si ce n'est pas recommandé par les meilleures marques de machines à laver, c'est possible. Et c'est aussi possible de le 'blinder' un peu.

    Dans le fichier 'ext_tableau.pl', on a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @ext_table = ('X','Y','Z');
    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
     
    use strict;
    use warnings;
     
    require 'ext_tableau.pl';
     
    our @tableau = (1,2,3,4);
    my @tableau2 = ('A','B','C');
     
    # Recopie le tableau de nom $strArrayName dans le tableau 
    # référencé par $array_ref
    # Renvoie 1 si OK, 0 si erreur
    sub fnGetArray
    {
    	my $strArrayName = shift;
    	my $array_ref = shift;
     
    	no strict 'refs';
     
    	if (!defined(@$strArrayName))
    	{
    		print "Tableau $strArrayName inconnu\n";
    		return 0;
    	}
     
    	@$array_ref = @$strArrayName;
     
    	return 1;
    }
     
     
    my @taVals;
     
    if (fnGetArray("tableau",\@taVals))
    {
    	# OK, ça marche sur tableau (our)	
    	print '@tableau : ' . join(' - ',@taVals) . "\n";
    }
     
    if (fnGetArray("tableau2",\@taVals))
    {
    	# Ne marche pas sur tableau2 (my)
    	print '@tableau2 : ' . join(' - ',@taVals) . "\n";
    }
     
    if (fnGetArray("ext_table",\@taVals))
    {
    	# OK sur ext_table (rien)
    	print '@ext_table : ' . join(' - ',@taVals) . "\n";
    }
    Attention, ce qui est déclaré en 'my' ne peut pas être accédé de cette façon (cf. le Camel Book).

    --
    Jako
    S'il n'y a pas de solution, c'est qu'il n'y pas de problème. Proverbe Shadok.

  6. #6
    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 JakoJako Voir le message
    Même si ce n'est pas recommandé par les meilleures marques de machines à laver, c'est possible. Et c'est aussi possible de le 'blinder' un peu.
    On peut le blinder encore mieux en mettant une déclaration de package dans le fichier de config et en consultant directement le hash de l'espace des noms correspondant... Mais à ce stade il me semble qu'un bon fichier de config classique remplirait bien mieux ce rôle tout en étant plus lisible pour ceux qui ne connaissent pas Perl.

    --
    Jedaï

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Ca marche !
    Yes, merci bcp Jakojako,

    Ca marche ! Bon je m'attendais pas a quelque chose d'aussi complique quand on sait qu'un simple eval suffirais dans d'autre langage, mais au moins ca roulotte.

    Merci encore a tous.

    Nico.

  8. #8
    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 occin Voir le message
    Ca marche ! Bon je m'attendais pas a quelque chose d'aussi complique quand on sait qu'un simple eval suffirais dans d'autre langage, mais au moins ca roulotte.
    Un simple eval suffit en Perl aussi (en fait tu n'as même pas besoin de eval() ), mais c'est une mauvaise pratique de programmation (et dans les autres langages aussi) et ce que te propose JakoJako est un peu plus sécurisé. Tu ferais mieux d'utiliser un vrai fichier de config tout de même.

    --
    Jedaï

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2007, 09h41
  2. Accéder à une table dont le nom est dans une table
    Par claralavraie dans le forum Oracle
    Réponses: 7
    Dernier message: 26/12/2006, 15h51
  3. Réponses: 3
    Dernier message: 05/10/2006, 18h52
  4. Réponses: 14
    Dernier message: 22/04/2006, 21h59
  5. Appel de methode dont le nom est dans une variable
    Par osopardo dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 20h56

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