|
|
||||||
|
#1
|
|
|
|
|
bonjour,
j'ai deux hash. le premier : my %SrcDatas; il est repli avec : $SrcDatas{$nom_du_fichier}=$MD5_du_fichier; le deuxième : my %Datas; il est rempli avec : $Datas{$nom_du_fichier}{$nom_du_serveur}=$MD5_du_f ichier; rien de bien complique. mon but maintenant est de comparer pour chaque serveur, que la liste des fichiers soit identique (même nombre, même nom, même MD5) que ceux dans %SrcDatas. existe-t-il un module perl pour comparer des 'hash' facilement ou bien je dois faire une boucle pour chaque serveur, dans laquelle je fais une boucle pour chaque fichier qui compare les noms, les MD5... ? aurais-je du choisir un autre modele de données ? merci de votre avis. |
|
|
|
#2
|
|
|
|
|
À (at) Fri, 14 May 2010 14:23:11 +0200,
"kurtz_le_pirate" <kurtzlepirate> écrivait (wrote): [..] > chaque serveur, que la liste des fichiers soit identique (même > nombre, même nom, même MD5) que ceux dans %SrcDatas. >> existe-t-il un module perl pour comparer des 'hash' facilement > ou bien je dois faire une boucle pour chaque serveur, dans > laquelle je fais une boucle pour chaque fichier qui compare les > noms, les MD5... ? > > aurais-je du choisir un autre modele de données ? Il est souvent intéressant de faire ce genre de tests lorsqu'on collecte les données plutôt qu'à posteriori comme ça les boucles sont déjà réalisées implicitement... Mais supposons que ce n'est pas faisable. La méthode à choisir dépend beaucoup du résultat attendu. On ne procédera pas de la même manière selon qu'on attend une réponse du type : 1- oui(tout est pareil)/non(il y a des différences). 2- tel serveur est différent des données locales. 3- pour chaque serveur, la liste des fichiers en trop, la liste des fichiers manquants, la liste des fichiers dont le MD5 différe. Je suppose aussi qu'on dispose aussi de la liste des serveurs (@serveurs). Une solution qui donne des réponses détaillées pourrait être la suivante (je n'ai pas testé le code) : # recherche des fichiers manquants ou différents my %fichiers_manquants; my %fichiers_differents; foreach my $local_file (keys %SrcDatas) { if (not defined $Datas{$local_file}) { # le fichier n'existe sur aucun serveur $fichiers_manquants{$local_file} = [@serveurs]; next; } foreach my $serveur (@serveurs) { if (not defined $Datas{$local_file}{$serveur}) { # le fichier n'existe pas sur $serveur push @{$fichiers_manquants{$local_file}}, $serveur; } elsif ($Datas{$local_file}{$serveur} ne $SrcDatas{$local_file}) { # le fichier diffère sur $serveur push @{$fichiers_differents{$local_file}}, $serveur; } } } # recherche des fichiers en surplus my %fichiers_ensurplus; foreach my $file (keys %Datas) { if (not defined $SrcDatas{$file}) { # le fichier n'existe pas en local $fichiers_ensurplus{$file} = [keys %{$Datas{$file}}]; } } Les clés de %fichiers_manquants donnent la liste des fichiers locaux qui manquent sur au moins un serveur (et on associe à chaque nom de fichier la liste des serveurs sur lesquels il n'existe pas). Le tableau associatif %fichiers_differents est bâti sur le même principe mais pour les fichiers qui diffèrent par leur MD5. Les clés de %fichiers_ensurplus donnent la liste des fichiers qui existent sur au moins un serveur sans exister en local (et on associe à chaque nom de fichier la liste des serveurs sur lesquels il est en surplus). Mais il faudrait adapter les structures de données qui collectent les réponses à la manière dont tu comptes exploiter ces réponses... |
|
#3
|
|
|
|
|
In article <wt98w7lmv59.fsf>,
Paul Gaborit <Paul.Gaborit> wrote: > ... >Il est souvent intéressant de faire ce genre de tests lorsqu'on collecte >les données plutôt qu'à posteriori comme ça les boucles sont déjà >réalisées implicitement... Mais supposons que ce n'est pas faisable. si bien sûr que c'est faisable. je n'y avais pas pensé. c'est plutot je collecte tout puis j'analyse... > La méthode à choisir dépend beaucoup du résultat attendu. On ne > procédera pas de la même manière selon qu'on attend une réponse du > type : > > 1- oui(tout est pareil)/non(il y a des différences). > 2- tel serveur est différent des données locales. > 3- pour chaque serveur, la liste des fichiers en trop, la liste des > fichiers manquants, la liste des fichiers dont le MD5 différe. > ... oui, c'est bien le point 3 auquel je voudrais arriver. je vais lire calmement ta réponse et voir comme adapter tout cela à mes besoins. en tout cas, merci beaucoup. |
|
|
| Discussions similaires | |
| Mettre un hash dynamique dans un hash ? Bonjour, J'aurais une petite question concernant les hash et comment inclure dynamiquement un hash dans un hash. Je souhaite faire un hash : my %zero = ('x' => 0, 'y' =>... |
|
| sorte de hash de hash comment faire ? j'aurais besoin d'une structue de "hash de hash" comment faire ??? la structure que je souhaite enregistre est du type : Hardware: Hardware Overview: Machine Name: iMac... |
|
| Hash de hashs : existence d'une clé dans une hash fille Bonjour, J'ai une hash de hashs, disons ça (je l'ai copié sur un site): my %file_attachments = ( 'test1.zip' => { '123'=>'yes','price' => '10.00', 'desc' => 'the 1st... |
|
| Initialiser un hash de hash de hash de hash au fur et à mesure Bonjour, Je désire obtenir le hash suivant mon_hash | |-----> LUC-----> avant ----->joueur_1 -----> pts =12 | | | | |
|
|
Fuseau horaire GMT. Il est actuellement 10h50. | Privacy Policy
|