|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 7 ![]() |
Bonjour,
Je souhaiterai déclarer une nouvelle table hash par tour de boucle. Je pensais mettre un compteur de type : $i=$i+1 Je voulais ensuite inclure ce compteur dans le nom de mon hash : my %h$i Je voudrai obtenir %h1, %h2... jusqu'à la fin de ma boucle. Auriez vous une idée de la façon dont il faille l'écrire? D'avance merci ! |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 570 ![]() |
Les références symboliques permettent de faire cela, mais leur utilisation est dépréciée avec les versions actuelles de Perl (et ce depuis au moins une douzaine d'années).
Il est préférable d'utiliser un hash de hashes (ou éventiellement un taleau de hashes, si tes valeurs sont toutes numérique), ave par exempole une syntaxe de e style:
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 7 ![]() |
Merci pour votre réponse !
J'ai donc essayé comme vous me l'avez conseillé, le tableau de hashes (car je n'ai que des valeurs numériques). Cependant quand je lui demande d'imprimer ce tableau, j'obtiens : HASH<0x48de10>HASH<0x4dbc10>HASH<0x4fe4f0> etc. Je vais essayer d'en apprendre plus sur les tableaux/hashes de hashes. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 570 ![]() |
Montre ton code, que l'on puisse t'aider à corriger ce qui ne va pas.
Mon exemple précédent était un peu inconsistant. Il aurait fallu écrire soit un hash de hashes:: soit un tableau de hashes (en supposant $i toujours numérique): sachant que je donne à mes variables les noms "hash" et "tableau" uniquement pour mieux clarifier leur nature dans l'exemple; dans ton vrai cas, utilise plutôt un nom spécifiant leur contenu.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
10
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 7 ![]() |
Voici mon code pour le moment :
Code :
|
||
|
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 570 ![]() |
Bonjour,
premier conseil: utilise toujours les pragmas suivants: Cela t'aider à détecter des erreurs qui tu risques de ne pas voir autrement. Par exemple, le tableau de hashes @h n'est pas déclaré (alors que tu déclares le hash %f que tu n'utilises pas). Deuxième point, cette syntaxe n'est pas correcte: Il faut écrire: Mais il y a plus simple: Code :
Code :
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
||||
|
|
10
|
|
|
#7 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 7 ![]() |
Merci de l'aide, j'essaye ça demain et je te donne mes résultats !
|
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 7 ![]() |
Bonjour,
j'ai apporté les modifications que tu m'as recommandé, voici donc le code : Code :
Global symbol "$i" requires explicit package name at c:\tr.pl line 5. BEGIN not safe after errors--compilation aborted at c:\tr.pl line 7. |
||
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 570 ![]() |
Ta variable $i n'est pas déclarée (ce qui est nécessaire avec le pragma 'use strict' que je t'ai conseillé. Change simplement la ligne 5 de ton code ci-dessus comme suit:
Tant que j'y suis, je vois au moins une seconde erreur entre les lignes 10 et 11: - tu ouvres le descripteur de fichier $FIC en ligne 10 - tu utilises le descripteur de fichier FIC en ligne 11. Change la ligne 11 comme suit: Tu auras sans doute un problème analogue avec %h, car h est un tableau de hashes (plus exactement un tableau de références vers des hash anonymes, mais, bon, ça veut dire la même chose), donc d'abord un tableau, et devrait donc être déclaré comme: "my @h;". Le reste paraît correct à vue de nez, mais je te conseillerais d'utiliser des noms de variables plus parlants. Par exemple: n'est pas très explicite. Ton code serait bien mieux auto-documenté si tu remplaçais $a et $b par des noms de variables décrivant le contenu de ces variables (comme je l'ai fait dans le code que j'ai proposé: "$fichier(@liste_fic)...", c'est bien plus clair que l'on examine chaque fichier d'une liste de fichiers). Idem pour "@h".
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
10
|
|
|
#10 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 7 ![]() |
Alors, déjà merci beaucoup pour ton aide, ça m'a permis de finir mon petit script, tout marche comme je le voulais !
Je vais changer les noms de mes variables histoires de m'y retrouver, comme tu me le conseil, et je pourrai passer à autre chose Un grand merci ! |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com