[Perl] Un array de Hashes UP: trier ce array

Un array de Hashes UP: trier ce array [Perl] - Perl - Programmation

Marsh Posté le 30-07-2003 à 18:41:34    

En gros, j'ai plusieurs enregistrements qui ont plusieurs champs
 
du genre, 1 enregistrement comprend un id, une position, un Ampérage
 
jpensais me faire un hashes avec comme clé id, position, amp
 
mais vu que jai plusieurs enregistrement, j'voudrais bien pouvoir les lire tous en 1 fois, fermer le fichier et ensuite faire mes boucles de traitement plutot que de lire 1 enregistrement, faire un traitement, relire un enregistrement...
 
vous voyez?


Message édité par burgergold le 13-08-2003 à 18:53:30
Reply

Marsh Posté le 30-07-2003 à 18:41:34   

Reply

Marsh Posté le 30-07-2003 à 19:03:35    

Hé bien tu peux faire un tableau de reference de hash:
 

Code :
  1. my @records;
  2. while(<IN> ) {
  3.   my ($id, $bidule, $machin) = split...
  4.  
  5.   push @records, {
  6.     id     => $id,
  7.     bidule => $bidule,
  8.     machin => $machin,
  9.   };
  10. }
  11. foreach my $record (@records) {
  12.   print $record->{id},"\n";
  13.   ...
  14. }

Reply

Marsh Posté le 30-07-2003 à 21:44:02    

pospos a écrit :

Hé bien tu peux faire un tableau de reference de hash:
 

Code :
  1. my @records;
  2. while(<IN> ) {
  3.   my ($id, $bidule, $machin) = split...
  4.  
  5.   push @records, {
  6.     id     => $id,
  7.     bidule => $bidule,
  8.     machin => $machin,
  9.   };
  10. }
  11. foreach my $record (@records) {
  12.   print $record->{id},"\n";
  13.   ...
  14. }




 
une fois qu'on a le tableau de hash, comment on récupère les clés ?? (les différents id par exemple)


---------------
http://runnerstats.net
Reply

Marsh Posté le 31-07-2003 à 01:16:11    

ben comme je te l'ai ecrit avec le foreach
Tu est obligé de parcourir tout le tableau
 
foreach my $record (@records) {
   print $record->{id};
}

Reply

Marsh Posté le 31-07-2003 à 09:27:37    

pospos a écrit :

ben comme je te l'ai ecrit avec le foreach
Tu est obligé de parcourir tout le tableau
 
foreach my $record (@records) {
   print $record->{id};
}

en fait, je me suis trompé
je voulais demander : comment on récupère id, bidule et machin ?

Reply

Marsh Posté le 31-07-2003 à 11:18:31    

ben c'est excatement pareil:
 
my $i;
foreach my $record (@records) {
  $i++;
  print "Ligne $i: id=",$record->{id}, " bidule=", $record->{bidule}, " machin= ", $record->{machin},"\n";
}

Reply

Marsh Posté le 31-07-2003 à 11:24:07    

pospos a écrit :

ben c'est excatement pareil:
 
my $i;
foreach my $record (@records) {
  $i++;
  print "Ligne $i: id=",$record->{id}, " bidule=", $record->{bidule}, " machin= ", $record->{machin},"\n";
}  

je me suis mal exprimé : ce qui m'intéresse de récupérer, ce ne sont pas les valeurs de hash, mais les clés

Reply

Marsh Posté le 31-07-2003 à 11:37:02    

bon
c la valeur que tu recupere la!
 
en gors:
si $record est une reference vers une hash, alors $record->{cle} te donne la valeur
 
en gros c'est $record = \%hash
donc $record->{cle} == $hash{cle}
tu vois?

Reply

Marsh Posté le 31-07-2003 à 11:56:29    

pospos a écrit :

bon
c la valeur que tu recupere la!
 
en gors:
si $record est une reference vers une hash, alors $record->{cle} te donne la valeur
 
en gros c'est $record = \%hash
donc $record->{cle} == $hash{cle}
tu vois?

c'est bon j'ai trouvé
merci :jap:

Reply

Marsh Posté le 13-08-2003 à 18:53:12    

up du topic
 
je cherche maintenant à sorter ce array selon les id, ensuite les positions
 
avec une db et un select ca serait facile, mais faut jtravaille avec un fichier
 
alors j'ai mon array @records, dans lequel j'ai les hashes id, position, num, amp
 
jveux sorter le tout en ordre de id, puis ordre de position
 
ya moyen de le faire avec un sort ou faut jme fasse mon propre systeme de tri?

Reply

Marsh Posté le 13-08-2003 à 18:53:12   

Reply

Marsh Posté le 14-08-2003 à 01:35:15    

il faut faire une fonction de tri
 
regarde ce topic, le probleme est similaire:
http://forum.hardware.fr/forum2.ph [...] subcat=392

Reply

Marsh Posté le 14-08-2003 à 07:25:10    

ça vous ennuie de faire des titres en français?

Reply

Marsh Posté le 14-08-2003 à 10:08:19    

Taz a écrit :

ça vous ennuie de faire des titres en français?


 
Tous les programmeurs Perl ont très bien compris :)
 
d

Reply

Marsh Posté le 14-08-2003 à 10:16:56    

là n'est pas la question.
 
t'aurais pu dire: "trier un tableau associatif"

Reply

Marsh Posté le 14-08-2003 à 15:26:30    

c'est plutot "trier un tableau  de hash", ou "trier un tableau de tableaux associatifs", ou "trier un tableau de references à des hashs"
there is more than one way to do it...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed