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 :

remplir une table hash


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut remplir une table hash
    Salut a tous, je viens de debuter en Perl.
    Je dois reperer les lignes dessous dans un fichier, mettre la valeur du premier champ dans une table hash


    Total Power = 2.287e-04 (100.00%)

    Totals (5 cells) 1.794e-05 1.349e-05 4.167e-09 3.144e-05 (100.0%)

    Total (5 nets) 1.071e-06 Watt
    voici mon script:

    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
    my %table         ;
    open(IN2, "$file_pt2")     or die "Cannot Open file $file_pt1\n";
    while ($ligne = <IN2>)
     {
    if ($line =~ m/Total\s+\w+\s+\=\s+(\d+\.\d+\w+\-\d+)/)
         {
    	 print  "$line\n";
    	 $table{Total_Power} = $1 ;
         }
    	     if ($ligne =~ m/Totals\s+/) 
    { 
    print ("$ligne \n"); 
    $table{Total_Power_net} = $1 ;
    }
    	     if ($ligne=~ m/Total\s+/) 
    { 
    print ("$ligne \n");	
    $table{Totals_Power_cell} = $1  ;
    }
    }
     
    foreach my $inst (sort keys(%table)) 
    {
    print "$inst => $table{$inst}","\n";
    }
     
     close IN2;
    voici le resultat de la simulation:

    Total_Power => 2.287e-04
    je ne parviens pas afficher le reste de la hash table, et ce peu importe le champ.

    Alors quelqu'un aurait -il une idee pour resoudre mon probleme?
    Merci
    PS: desole pour l'absence d'accent, j'ecris d'un qwertz

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    tout d'abord, si ce n'est pas déjà fait je te conseille de débuter tes scripts par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use strict;
    use warnings;
    ensuite veille à tes noms de variables, $line/$ligne, $file_pt1/$file_pt2 (fautes de recopie ?)

    enfin le problème semble être au niveau du $1, dont tu n'as pas parfaitement saisi l'emploi
    je te conseille ce passage de la

    bon courage !
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut re remplir une table hash
    Merci pour ta reponse.

    De ce que j'ai compris de la faq, si je veux reperer la ligne ci dessous dans mon rapport:

    Total (5 nets) 1.071e-06 Watt

    et mettre la valeur 1.071e-06 dans sa hash table
    $table{Total_Power_net} = $1 avec $1 correspondant a 1.071e-06 , mon code devrait ressembler a ca:

    use strict;
    use warnings;

    my %table ;
    open(IN2, "$file_pt2") or die "Cannot Open file $file_pt2\n";
    while ($ligne = <IN2>)
    {
    if ($j =~ /\s+(\d+)\s+\Watt/) # je repere la portion 1.071e-06 Watt

    {
    print ("$j \n");
    $table{Total_Power_net} = $1 ;
    }
    }
    close IN2;

    Mais cela marche pas je parviens pas retrouver la ligne avec cette synthase.

    Cependant avec les synthases $j =~ /Watt$/ ou $j =~ /Total/ je retrouve la ligne mais cela est intule puisque je recupere pas le $1.

    Autre souci, meme avec $j =~ /s+\Watt/ je recupere pas la ligne

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    alors oui ça marche mais c'est améliorable

    que penses-tu de celle-là: ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai trouve la bonne synthase pour Total (5 nets) 1.071e-06 Watt

    if ($j =~ m/Total\s+\(\d+\s+\w+\)\s+(\d+\.\d+\w+\-\d+)/)
    {
    print ("$j \n");
    $table{Total_Power_net} = $1 ;
    }

    avec celle la je recupere $1, mais comme dans mon rapport les lignes typees

    Total (5 nets) 1.071e-06 Watt

    J'en ai trois, ma table ne retient que le $1 de la derniere. Je vais tente une boucle For pour conserver tous les $1.
    Au passage les lignes concernees sont :

    Total (5 nets) 1.349e-05 Watt
    Total (5 nets) 4.927e-06 Watt
    Total (5 nets) 1.071e-06 Watt

  6. #6
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    tu ne retiens la dernière valeur que parce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $table{Total_Power_net} = $1 ;
    écrase la valeur précédente.

    il te faut donc stocker correctement, pour ça tu as le choix: une liste, une somme, une chaîne de caractère que tu agrandis, etc, suivant l'utilisation que tu veux en faire.
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Re coucou

    j'ai toujours de meme probleme. Je ne vois pas comment integrer un liste a ma hash table

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    voici mon code

    use strict;
    use warnings;

    my @liste = ();
    my %table ;
    open(IN2, "$file_pt2") or die "Cannot Open file $file_pt2\n";
    while ($ligne = <IN2>)
    {

    if ($j =~ m/Total\s+\(\d+\s+\w+\)\s+(\d+\.\d+\w+\-\d+)/)
    {
    print ("$j \n");
    $table{Total_Power_net} = $1 ;
    push(@liste,$1);
    print ("$liste \n");
    }

    }
    close IN2;

  9. #9
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push @{$hash{$key}}, $value;
    si la liste n'existe pas, elle sera créée la première fois que tu appelles cette ligne.

    n'hésite pas à chercher dans les forums et faq
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

Discussions similaires

  1. Remplir une Table avec 2 tables
    Par Titouf dans le forum Oracle
    Réponses: 4
    Dernier message: 03/11/2005, 09h35
  2. comment remplir une table
    Par donny dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/07/2005, 11h22
  3. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22
  4. [SWT] Comment remplir une Table ?
    Par simon77 dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 23/08/2004, 10h31
  5. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 10h15

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