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 :

[langage] génération d'une liste


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut [langage] génération d'une liste
    Bonjour tout le monde

    voila je cherche à générer une liste. A priori, rien de bien compliqué. Voici ce que j'ai écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
       while ($num <= $total)
       {
          $test -> Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,$num,$evtHashRef)
          			      or die "Can't read EventLog entry on $server\n";
     
          push @listeevent,$evtHashRef;
          # @listeevent = (@listeevent,$evtHashRef);
          $num++;
       }
    Comme vous pouvez le constater, j'ai tenté 2 méthodes pour empiler la liste. Mon problème est que dés que $evtHashRef voit sa valeur changée,
    il modifie tous les enregistrements de la liste.

    Pour essayer d'être plus clair voici un exemple bidon mais c'est un exemple.
    au premier passage la liste contient 1
    au deuxième elle devrait contenir 1, 2
    mais contient en réalité 2, 2

    Si quelqu'un comprend moi pas.

    Merci A+

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    salut

    c'est un pb de reference selon toi ?

    tu as essayer de dereferencer et de stocker la valeur dans le tableau plutot que une reference ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    non car je ne sais pas faire. Par ailleurs, la variable $evtHashRef, contient plusieur champs alors est-ce que cela peut marcher?

    Si tu peux m'expliquer comment déréférencer je te dirais si ça résoud le pb.

    Merci

    A+

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    salut

    c'est un peu complique,

    que contient exactement la variable $evtHashRef (si je comprends bien, c'est une reference sur un hachage et il y a alors plusieurs couples cle-valeur) et que veux tu reellement stocker dans ton tableau ->tout ou seulement une valeur de cle, un couple de valeur?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Salut,

    la variable contient l'ensemble des champs du journal d'événement de windows ainsi que la valeur pour chacun de ces champs.

    Il me faut récupérer l'ensemble de ces valeurs afin, par la suite, de pouvoir réaliser des traitements sur chacun des évements de cette liste.


    Merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    tu ne peux donc pas stocker ca dans un tableau, il te faut un hash puisque $evtHashRef pointe sur un hash,

    en fait comme $evtHashRef, est une reference sur ton hash, le hash lui meme est : %{$evtHashRef}

    http://www.lhullier.org/publications...html#id2469167

    donc pour afficher tes valeurs tu dois faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach my $k (keys %{$evtHashRef})
    {
      print "KEY: $k \tVALUE: $evtHashRef->{$k}\n";
    }
    je pense que ca devrait aller mieux

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Désolé de ne pas avoir répondu plus tôt mais j'ai du passer sur un autre projet.

    J'ai le ceque tu m'a écri et j'ai écrit ceci:

    @listeevent = (@listeevent,%{$evtHashRef});

    mais cela convient pas.

    Est-il possible de générer une liste de liste afin d'avoir quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @liste
            [0]
                valeur 1
                valeur 2
            [1]
                valeur 1
                valeur 2
    ainsi, @liste[0] contient les valeurs d'un event du journal
    et @liste[1] contient les valeurs d'un autre event du journal

    Si tu a une idée, Je suis désolé si je ne suis pas trés clair mais je suis pas dévelloppeur et j'ai des fois du mal a tout comprendre.

    Encore Merci[/code]

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    salut,

    pour stocker ce genre de choses, il faudra que tu passes par des references, sinon tu ne peux pas stocker plusieurs scalaires dans une seule case d'un tableau (sauf si tu les concatenes avec un separateur particuleir puis tu fais un split ensuite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @liste
            [0]
                valeur 1
                valeur 2
            [1]
                valeur 1
                valeur 2
    mais sinon peux tu nous montrer ce qu'affiche le code que je t'ai donne (et d'abord est-ce-que cela affiche ce que tu voulais ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach my $k (keys %{$evtHashRef})
    {
      print "KEY: $k \tVALUE: $evtHashRef->{$k}\n";
    }
    ensuite je pense que le pb sera vite resolu

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Voici donc le code écrit

    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
     
    while ($num <= $total)
       {
          $test -> Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,$num,$evtHashRef)
          			      or die "Can't read EventLog entry on $server\n";
          foreach my $k (keys %{$evtHashRef})
          {
             print "KEY: $k \tVALUE: $evtHashRef->{$k}\n";
          }
     
          #$start = $evtHashRef;
          #push @listeevent,$start;
          #@listeevent = (@listeevent,%{$evtHashRef});
          $num++;
       }
    et voici ce que j'obtiens

    KEY: TimeGenerated VALUE: 1089114815
    KEY: ClosingRecordNumber VALUE: 0
    KEY: RecordNumber VALUE: 1
    KEY: User VALUE:
    KEY: EventID VALUE: 1269629470
    KEY: Computer VALUE: PC-BEAUJAULTA
    KEY: Length VALUE: 0
    KEY: Timewritten VALUE: 1089114815
    KEY: Strings VALUE: Opération réussie.
    KEY: EventType VALUE: 4
    KEY: Source VALUE: Oakley
    KEY: Data VALUE:
    KEY: Category VALUE: 0
    KEY: TimeGenerated VALUE: 1089114837
    KEY: RecordNumber VALUE: 2
    KEY: ClosingRecordNumber VALUE: 0
    KEY: User VALUE:
    KEY: Computer VALUE: PC-BEAUJAULTA
    KEY: EventID VALUE: 1000
    KEY: Length VALUE: 0
    KEY: Timewritten VALUE: 1089114837
    KEY: EventType VALUE: 4
    KEY: Strings VALUE: Product: WebFldrs -- L'installation est terminée.KEY: Source VALUE: MsiInstaller
    KEY: Category VALUE: 0
    KEY: Data VALUE:

    Est-ce que c'est ce qu'il te fallait

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    ok,

    et tu veux formater tes donnees comment en sortie ?

    parce que je ne vois par comment tu vas mettre ca dans un tableau ? (tu veux absolument un tableau ?)

    tu veux avoir ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @liste
            [0]
                VALUE: 1089114815 
                VALUE: 0 
                VALUE: 1 
                VALUE: 1269629470
                VALUE: PC-BEAUJAULTA
            [1]
                VALUE: 1089114837
                VALUE: 2 
                VALUE: 0
                VALUE: 
                VALUE: PC-BEAUJAULTA
    mais la tu perds l'info concerant la cle ?
    et les champs n'apparaissent pas dans le meem ordre a chaque passage dans la boucle while

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Oui mais en concervant la clé.de manière à pouvoir facilement retrouver mes petits. Maintenant je ne suis pas obliger d'utiliser des tableaux c'est juste que je connais que ça pour le momment.

    Si tu penses qu'il faut autre chose je prends pour vu que je sois capable d'utiliser les valeurs de la variable ailleur dans mon programme.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    Essaye ca pour voir si ca correspond a ce que tu veux


    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
    while ($num <= $total)
       {
          $test -> Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,$num,$evtHashRef)
                         or die "Can't read EventLog entry on 
     
          my %hash = %{$evtHashRef};
          @listeevent = (@listeevent,\%hash );
          $num++;
       }
     
    my $count = 1;
    foreach my $ref_hash (@listeevent) {
          print "Event $count\n";
          foreach my $k (keys %{$ref_hash} )
          {
             print "\tKEY: $k \tVALUE: $ref_hash->{$k}\n";
          } 
    }

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    Essaye ca pour voir si ca correspond a ce que tu veux


    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
    while ($num <= $total)
       {
          $test -> Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,$num,$evtHashRef)
                         or die "Can't read EventLog entry on 
     
          my %hash = %{$evtHashRef};
          @listeevent = (@listeevent,\%hash );
          $num++;
       }
     
    my $count = 1;
    foreach my $ref_hash (@listeevent) {
          print "Event $count\n";
          foreach my $k (keys %{$ref_hash} )
          {
             print "\tKEY: $k \tVALUE: $ref_hash->{$k}\n";
          } 
    }

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Génial voici ce qui ressort:

    Event 0
    KEY: TimeGenerated VALUE: 1089114815
    KEY: RecordNumber VALUE: 1
    KEY: ClosingRecordNumber VALUE: 0
    KEY: User VALUE:
    KEY: Computer VALUE: PC-BEAUJAULTA
    KEY: EventID VALUE: 1269629470
    KEY: Length VALUE: 0
    KEY: Timewritten VALUE: 1089114815
    KEY: EventType VALUE: 4
    KEY: Strings VALUE: Opération réussie.
    KEY: Source VALUE: Oakley
    KEY: Category VALUE: 0
    KEY: Data VALUE:
    Event 1
    KEY: TimeGenerated VALUE: 1089114837
    KEY: ClosingRecordNumber VALUE: 0
    KEY: RecordNumber VALUE: 2
    KEY: User VALUE:
    KEY: EventID VALUE: 1000
    KEY: Computer VALUE: PC-BEAUJAULTA
    KEY: Length VALUE: 0
    KEY: Timewritten VALUE: 1089114837
    KEY: Strings VALUE: Product: WebFldrs -- L'installation est terminée. KEY: EventType VALUE: 4
    KEY: Source VALUE: MsiInstaller
    KEY: Data VALUE:
    KEY: Category VALUE: 0
    Event 2
    KEY: TimeGenerated VALUE: 1089115827
    KEY: ClosingRecordNumber VALUE: 0
    KEY: RecordNumber VALUE: 3
    KEY: User VALUE:
    KEY: EventID VALUE: 1000
    KEY: Computer VALUE: PC-BEAUJAULTA
    KEY: Length VALUE: 0
    KEY: Timewritten VALUE: 1089115827
    KEY: Strings VALUE: Product: Windows 2000 Support Tools -- Installation operation completed successfully. KEY: EventType VALUE: 4
    KEY: Source VALUE: MsiInstaller
    KEY: Data VALUE:
    KEY: Category VALUE: 0


    Si j'ai bien compris si je veux récupérer par exemple la valeur de EventID pour l'enregistrement 0 je dois écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach my $test (@listeevent) {
         $test{EventID};
    }

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    tu peux acceder directement a ta reference de hash en faisant

    $hashref = $tab[0];
    pour avoir les info de l'enregistrement 0

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Merci pour toutes ces explications cela m'a permis de faire un grand pas en avant.

    A+

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Dernière toute petite question comment vider toute la variable @listeevent

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Points : 96
    Points
    96
    Par défaut
    je ne sais pas
    et je ne sais pas si c'est utile comme en C pour recup de la memoire,

    je demande l'avis de plus specialistes que moi !!!

  19. #19
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Hum comme fsapet je sais pas si ca sert ... sinon :

    je pense que ca convient non ?
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Entre temps j'ai trouvé une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    @listeevent= splice(@listeevent,@listeevent,@listeevent);
    cela semble bien fonctionner

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [langage] Supprimer un élément dans une liste
    Par myjuna dans le forum Langage
    Réponses: 15
    Dernier message: 06/08/2014, 11h49
  2. [langage] Parcourir une list de array
    Par nledez dans le forum Langage
    Réponses: 4
    Dernier message: 08/11/2004, 17h11
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43
  4. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09
  5. Réponses: 4
    Dernier message: 24/04/2003, 22h28

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