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

  FORUM HardWare.fr
  Programmation
  Perl

  [perl] table hash multidimensionnel

 


les tableaux & hash en perl




Attention si vous cliquez sur "voir les résultats" vous ne pourrez plus voter

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[perl] table hash multidimensionnel

n°1547741
pierrickg
Posté le 23-04-2007 à 23:28:55  profilanswer
 

bonjour tous,
j'ai un gros soucis de hash multidimensionnel.
je récupère une liste de liens dans une base mysql, je teste leur existence et je mets les faux dans un tableau, par site (puisque 1 site peut avoir plusieurs liens dans la BD).
ensuite j'envoie un mail à chaque site avec la liste de SES liens faux.
mon problème : ça liste TOUS les liens de TOUS les sites à chaque fois.
 
le code :  

Code :
  1. # prendre tous les liens
  2. $query = "SELECT * FROM liens";
  3. $sth = $dbh->prepare($query);
  4. $sth->execute;
  5.  
  6. # enregistrer les url fausses
  7. my %site_list = {};
  8. while ($data = $sth->fetchrow_hashref()) {
  9.     $nb_liens++;
  10.     # test url
  11.     $etat = &check_url($data->{'url'});
  12.     if ($etat eq "ok" ){
  13.         $nb_ok++;
  14.     } else {
  15.         my %h = {};
  16.         #on index chaque url par nom
  17.         $h->{$data->{'lien_nom'}} = $data->{'url'};
  18.         #on index par site
  19.         $site_list->{$data->{'site_id'}} = $h;   
  20.         $nb_bad_liens++;
  21.     }
  22. }
  23. my $list_l;
  24. for my $id (keys %{$site_list}) {
  25.     # infos site
  26.     $query = "SELECT site_nom FROM sites WHERE site_id = '$id' LIMIT 1";
  27.     $sth = $dbh->prepare($query);
  28.     $sth->execute;
  29.     $data_site = $sth->fetchrow_hashref();
  30.     $site_nom = $data_site->{'site_nom'};
  31.    
  32.     # infos webmestre
  33.     $query = "SELECT * FROM webmestres WHERE site_id = '$id' LIMIT 1";
  34.     $sth = $dbh->prepare($query);
  35.     $sth->execute;
  36.     $data_wbm = $sth->fetchrow_hashref();
  37.     $wbm_nom =     $data_wbm->{'wbm_nom'};
  38.     $wbm_prenom = $data_wbm->{'wbm_prenom'};
  39.     $wbm_email = $data_wbm->{'wbm_email'};
  40.    
  41.     # liste des liens
  42.     $list_l = '';
  43.     for my $name (keys %{$site_list->{$id}}){
  44.         $list_l .= "'$name' - " . $site_list->{$id}->{$name} . "\n";   
  45.     }
  46.  
  47.     # envoyer l'email
  48.     $msg= <<_EOM_;
  49. Bonjour $wbm_prenom $wbm_nom,
  50. Vous êtes webmestre du site "$site_nom" inscrit sur l'annuaire.
  51. Un ou plusieurs liens enregistrés dans l'annuaire pour votre site semblent inaccessibles :
  52. $list_l 
  53. ####### etc... (et envoi)


je pense que ça débloque au niveau de
for my $name (keys %{$site_list->{$id}})
mais je comprends pas comment lister que les enregistrements de chaque id à la fois.
 
merci d'avance

mood
Publicité
Posté le 23-04-2007 à 23:28:55  profilanswer
 

n°1547752
morphorpse
Posté le 23-04-2007 à 23:50:05  profilanswer
 

Bonsoir,
 
Tu as déja testé avec un site en particulier avant de faire des tableaux ? ca fonctionne ?

n°1550931
pierrickg
Posté le 28-04-2007 à 13:14:05  profilanswer
 

C'est OK
je suis + PHPiste que Perliste alors j'ai du mal avec les hash et autres tablos, références aux tableaux et tout.
Mais en fait, transformer

Code :
  1. my %h = {};
  2.                 $h->{$data->{'lien_nom'}} = $data->{'url'};
  3.                $site_list->{$data->{'site_id'}} = $h;


en
 

Code :
  1. $site_list->{$data->{'site_id'}}{$data->{'lien_nom'}} = $data->{'url'};


 
et ça marche !
problème réglé (en tout cas celui-ci ;))


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

  [perl] table hash multidimensionnel

 

Sujets relatifs
Perl et processSélectionner nième entrée d'une table
Afiicher les 5 résultats les plus nombreux dans une table MySQLOrdonner une table à partir d'une autre table
[PERL] Fenêtre dos et exec()fonction avec table hash en parametre
ASP.NET structure table datasetCombiner le résultat de deux requêtes sur une même table
[Java] Générer un hash MD5 
Plus de sujets relatifs à : [perl] table hash multidimensionnel


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