IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

un hash de tableaux à partir d'un fichier txt


Sujet :

Langage Perl

  1. #21
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    bonjour;
    desoler de vous de déranger encore lolo78; mais j'ai encore un probleme avec cette boucle
    j'ai fait une petite exemple pour simplifier
    en faite j'ai deux hash de tableaux , j'essaie de tester si tous les élements d'un keys de mon tableau %hash se trouve tous dans une meme clé de mon %h et afficher avec quel keys voilà mon code actuellement mais y'a des erreurs dans la boucle que j'ai faite , je sais pas exatement en kel moment je déclare mon variable et en kel moment je récupere son contenu et en kel moment je remets le compteur à zéro , voilà mon code actuellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    use strict;
    use warnings;
    use Data::Dumper;
     
    my %h;
    %h = (
         K1=> ["has","hsgz","hsgz"],
         K2=> ["dax","pip","pip","has",],
    	 K3=> ["dax","hsa"],
    	 K4=> ["dax"],
    	 K5=> ["pip","pip","mas","mna","maa"],
     
    	);
    my %hash;
    %hash = (
         clone1=> ["has","hsgz","hsgz"],
         clone2=> ["dax","mac" ],
    	 clone3=> ["max","pip","nana","has",],
    	 clone4=> ["dax","hsa"],
    	 clone5=> ["pip","pip","chu","mna","mna"],
     
    	);
    print "$#{$hash{clone1}} \n";
    my @liste ;
    @liste=("has","hsgz",);
    my @liste1=("has","hsgz",);
    my @liste2=("has","hsgz","hsgz");
    my @liste_controle;
    foreach my $x(@liste1){
       foreach my $y(@liste2){
         if ($x=~m/$y/){push (@liste_controle,1);}
     
       }
    }
    my $long_liste1=$#liste1+1;
    my $long_liste2=$#liste2+1; 
    if ($long_liste2>=$long_liste1){print "reussi\n";}
    else {print "non reussi\n";}
    #if ($#@liste1=$#liste2){print "vrai reussi\n";}
    #else {print "non reussi\n";}
    my @clone_clade;
    foreach my $f(keys(%hash)  ) {my $compteur_clone_clade=0;
     
       foreach my $x(@{$hash{$f}} ){
     
          foreach my $g(keys (%h) ){
    	    my $compteur_element_clade=0;
            my $compteurXvsY=0;
     
             foreach my $y(@{$h{$g} } ){
     
                 if ($x=~m/$y/){ $compteurXvsY=1 ; }else {$compteurXvsY=0 ;}
       }
     if($compteurXvsY==1)  {$compteur_element_clade=1;
                           $compteur_clone_clade+=$compteur_element_clade;}
     
     
     
     
    }
    my $p=$#{$hash{$f}}+1;
     if ($compteur_clone_clade==$p) {
     
     print "tous les especes de $f se trouve dans la meme clade   $compteur_clone_clade  $p          \n";}
     
     
     
     }
     
     }
     
     
    <>;
    merci d'avance bonne journée à tous

  2. #22
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Citation Envoyé par abdou3058 Voir le message
    desoler de vous de déranger encore lolo78;
    Tu ne déranges pas, Abdou, c'est un forum d'entraide, nous sommes contents de t'aider, ou du moins d'essayer de t'aider.

    Citation Envoyé par abdou3058 Voir le message
    en faite j'ai deux hash de tableaux , j'essaie de tester si tous les élements d'un keys de mon tableau %hash se trouve tous dans une meme clé de mon %h et afficher avec quel keys
    Hum, dans ton exemple, les deux hachages n'ont pas les mêmes clés; du coup on ne peut pas vraiment comparer les hachages proprement dits.

    Mais on peut bien sûr comparer le contenu des hachages.

    Le plus simple serait de créer un nouveau hachage simple (non imbriqué) avec comme clés les valeurs contenues dans tes tableaux. Mais cela ne préserverait pas l'information des groupes d'éléments, je ne sais pas si c'est suffisant. On ne pourra dire que ceci: tous les éléments finaux du hash A sont bien dans le hash B (ou il en manque), et inversement pour B et A. Est-ce que cela suffit? Dans ce cas, c'est très simple et ça tient en 4 ou 5 lignes de code. Si ça ne suffit pas, c'est un peu plus compliqué (mais ça reste tout à fait faisable).

  3. #23
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    salut ;
    j'ai simplifie encore les choses en faisant la comparaison juste entre deux liste voilà le code et l'esxemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    my @coles =("has","hsgz","pip","max","msx",);
    my @blast=( "pip","pip","mas","mna","maa","has","hsgz","hsgz","has" );
     
     
    my $compteurT=0; 
    foreach my $x(@coles){
     my  $B=0;
     my $compteB =0;
      foreach my $y(@blast){
      if ($x=~m/$y/g){print"$x :$y coresp \n";$B++; }
       else {print "$x:$y not \n";	 }
      }
     
    if ($B>0){$B=1;$compteB+=$B;}
    else{$B=0;$compteB+=$B;}
    print "lelement $x: $compteB\n";
    $compteurT+=$compteB;
     
    }
     
    print "le nombre de match pour la liste est $compteurT\n ";
    my $taille=$#coles+1;
    if ($compteurT==$taille){print "toute la liste est contenu ds la liste2\n";}
    elsif($compteurT<$taille){print "toute la liste n'est contenu ds la liste2\n";}
    else{print "erreur fatale dans ta boucle\n";}
     
     
     
     
     
     
    print "fin\n";
    mais dés que je rajoute les deux foreach à l'exterieur , pour faire la comparaison entre deux hash , ca se complique et j'y arrive pas
    mon but est de savoir si tous les elements d'une liste se trouve bien dans l'autre liste et je le généralise pour un hash
    merci

  4. #24
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je t'ai donné une solution dans ton autre post sur le même sujet. Va voir.

  5. #25
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    ca avance mais c'est encore loin

    là j'ai fait la comparaison de tous les listes d'un hash de tableaux avec une seule liste et ca donne des résultats parfaite , dés que j'introduits la derniere foreach pour comparer les deux hash , ca donne des résultats bizzare voilà l'exemple avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    my %hash;
    %hash = (
         clone1=> ["has","hsgz","hsgz"],
         clone2=> ["dax","mac" ],
    	 clone3=> ["max","pip","nana","has",],
    	 clone4=> ["dax","hsa"],
    	 clone5=> ["pip","pip","chu","mna","mna"],
     
    	);
     
     
     
    my @coles =("has","hsgz","pip","max","msx",);
    my @blast=( "pip","pip","mas","mna","maa","has","hsgz","hsgz","has" );
     
    foreach my $z(keys %hash){
    my $compteurT=0; 
    foreach my $x(@{$hash{$z} }  ){
     my  $B=0;
     my $compteB =0;
     
      foreach my $y(@blast){
      if ($x=~m/$y/g){
    #print"$x :$y coresp \n";
    $B++; }
       else {
    #print "$x:$y not \n";	
       }
      }
     
    if ($B>0){$B=1;$compteB+=$B;}
    else{$B=0;$compteB+=$B;}
     
    $compteurT+=$compteB;
     
    }
     
     
    my $taille=$#{$hash{$z} }+1;
    if ($compteurT==$taille){print "la liste $z se trouve =>nombre de match:$compteurT taille de $z :$taille \n";}
    elsif($compteurT<$taille){print "la liste $z ne se trouve pas=> nombre de match:$compteurT taille de $z :$taille \n";}
    else{print "erreur fatale dans ta boucle\n";}
     
     
     
    }
     
     
    print "fin\n";	
    <>;
    Nom : p.PNG
Affichages : 245
Taille : 23,0 Ko
    merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Remplir plusieurs tableaux à partir d'un fichier XML
    Par MarsVolta dans le forum VBA Word
    Réponses: 2
    Dernier message: 15/05/2016, 21h52
  2. [Tableaux] transformation d'un fichier txt en xml
    Par edophie dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2006, 13h55
  3. Réponses: 3
    Dernier message: 08/08/2006, 03h50
  4. Réponses: 4
    Dernier message: 19/03/2006, 16h20
  5. Réponses: 4
    Dernier message: 27/07/2005, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo