Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2445 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Petit problème avec un hash, des tableaux et des références

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petit problème avec un hash, des tableaux et des références

n°1824107
yellu
Posté le 09-12-2008 à 12:27:28  profilanswer
 

Bonjour,
 
J'ai un soucis sur ce morceau de perl issu de mon programme :
 

Code :
  1. open(my $fh, "<", $this->get('file_datas')) or die("Error: can't open ".$this->get('file_datas')."\n" );
  2.  
  3. my $row = $csv->getline($fh);
  4. my @columns = @{$row};
  5. my $i = 0;
  6. while($row = $csv->getline($fh)) {
  7.    
  8.   my %line;
  9.    
  10.   my $j = 0;
  11.    
  12.   foreach(@{$row}) {
  13.      
  14.     $line{$columns[$j]} = $_;
  15.      
  16.     $j++;
  17.      
  18.   }
  19.   # Et la je fais qq chose avec %lines
  20. }


 
Pour simplifier ce code j'aimerai soit savoir s'il existe une methode de l'objet CSV qui renvoi directement un tableau Hash avec les clefs issu de la premières lignes du CSV. (J'en doute).
Soit savoir si on peut comme en PHP construire un tableau associatif a partir de deux tableaux (un contenant les clefsn l'autre les valeurs), comme je fais là mais en une seule fonction peut-être déjà existante.
 
Pour l'instant j'ai essayé pour soulager cette portion en déportant la création de ce hash dans une fonction dont voici la tête :
 

Code :
  1. sub get_csv_line {
  2.   my ($this, @columns, $row) = @_;
  3.  
  4.   my %line;
  5.  
  6.   my $i = 0;
  7.   foreach(@{$row}) {
  8.    
  9.     $line{$columns[$i]} = $_;
  10.    
  11.     $i++;
  12.    
  13.   }
  14.  
  15.   return %line;
  16.  
  17. }


 
Et dans cette fonction ce que je ne comprend c'est que si je fais un foreach sur @columns, je trouve dans la dernière case la référence vers le tableau "row".
 
Auriez vous quelques conseils ?
 
Merci d'avance?
Yellu


Message édité par yellu le 09-12-2008 à 12:28:41
mood
Publicité
Posté le 09-12-2008 à 12:27:28  profilanswer
 

n°1824201
gilou
Modérateur
Modzilla
Posté le 09-12-2008 à 14:43:43  profilanswer
 

Citation :

my ($this, @columns, $row) = @_;


Ca ne peut pas marcher, ça.
ton second element @columns tout bouffer de @_ (sauf sa premiere valeur, assignée a $this), et $row sera toujours vide.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1824223
gilou
Modérateur
Modzilla
Posté le 09-12-2008 à 15:02:08  profilanswer
 

Citation :

Pour simplifier ce code j'aimerai soit savoir s'il existe une methode de l'objet CSV qui renvoi directement un tableau Hash avec les clefs issu de la premières lignes du CSV. (J'en doute).


Il me semble qu'il suffit de lire la doc de Text::CSV_XS pour trouver la réponse (si c'est bien ce module que tu utilises, cf un de tes précédents posts):
Tu fais pour la premiere ligne  (je coupe colle le code a partir de la doc)
$csv->column_names ($csv->getline ($io));
puis pour chacune des lignes ensuite
$hr = $csv->getline_hr ($io);
et $hr est une reference a un hash, par exemple si toto est un nom de champ en premiere ligne, tu accedes a la valeur correspondante dans la ligne par $hr->{toto}
 
A+,


Message édité par gilou le 09-12-2008 à 15:03:49

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1824257
yellu
Posté le 09-12-2008 à 15:35:14  profilanswer
 

Je comprend maintenant pourquoi $row était vide, quand à la doc en effet, je l'ai pourtant lu mais dans la précipitation j'ai sauté les choses importantes :(
 
Merci beaucoup Gilou, encore une fois ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Petit problème avec un hash, des tableaux et des références

 

Sujets relatifs
Probleme MySQLProblème alignement bloc CSS [terminé]
Problème d'adition avec jsprobleme grammaire linéaire en C
Probleme avec pages html et lien sous IE 7Problème de réels en C
Problème affichage applications java[Résolu] Problème avec propriété float
Problème de tableauProblème code javascript
Plus de sujets relatifs à : Petit problème avec un hash, des tableaux et des références


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR