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 :

Autovivification sur un tableau


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Par défaut Autovivification sur un tableau
    Bonjour,

    je possède un fichier (ou un tableau Perl) structuré comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    2011,02,1,0
    annee,mois,connections au serveur 1,connections au serveur 2
    Je souhaite réaliser une page HTML avec un tableau permettant d'afficher le total des connections par mois et par serveur. Comme ceci :

    Mois Serveur 1 Serveur 2
    Janvier 2011 56 220
    Février 2011 146 73

    Je pense qu'il faut passer par l'auto-vivification, mais j'ai encore du mal avec ce principe qui est assez compliqué. Pourriez-vous m'aider ? Merci d'avance !

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Qu'entends-tu par auto-vivication, dans ton cas ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Par défaut
    Je crois que c'est avec toi que j'en avais discuté sur le SdZ pour un autre cas ^^ en fait le terme exact serait sans doute "table de hashage". Enfin, dans ma tête, la difficulté réside dans le fait que le tableau comporte plusieurs clés d'entrées (mois/année à combiner, et le serveur).

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    D'accord.
    Donc, en fait, tu veux additionner toutes les connexions à chacun de tes serveurs en fonction de la date, c'est ça ?

    Le cas échéant, il te suffit de créer deux table de hachage (une par serveur).
    Pour chaque ligne de ton fichier, tu utilises l'année et le mois pour en définir une clé unique et tu ajoutes le nombre de connexions.

    En gros, tu auras un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while( $line = <F> ) {
      my ( $year, $month, $serv1, $serv2 ) = split( ",", $line );
      $h_serv1{ $year.$month } += $serv1; #auto-vivication
      $h_serv2{ $year.$month } += $serv2;
    }
    L'auto-vivication est la faculté des tableaux associatifs à créer automagiquement une entrée quand tu tente d'accéder en écriture à une clé qui n'existe pas.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Par défaut
    Je comprends un peu mieux, là. Faut dire que ce cas est plus simple que celui que j'avais eu à traiter avant ! Néanmoins, j'ai du mal à afficher les résultats...

    J'ai fait des essais en mettant cette ligne dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print $year.$month," - ",$h_serv1{ $year.$month },"\n";
    Bien entendu, ça m'affiche la progression du remplissage du tableau... Mais quand on la met à l'extérieur de la boucle, il me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Global symbol "$year" requires explicit package name at...
    Global symbol "$month" requires explicit package name at...
    Je pense qu'il faut une boucle foreach pour parcourir toutes les clés, mais je n'arrive pas à la mettre en oeuvre sans avoir ces erreurs de variables non déclarées.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Par défaut
    Le problème doit venir du fait que tu déclare tes variables $year.$month au sein d'une boucle (foreach,while,...).

    Si une variable est déclarée dans une boucle, elle n'existe que dans celle-ci, ce qui explique ton erreur.

    ps: Il y a aussi des erreurs dans ton print (il faut mettre "."et non "," pour separer tes variables).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Références et pointeurs sur un tableau
    Par smag dans le forum C++
    Réponses: 2
    Dernier message: 01/03/2005, 20h29
  2. function sur un tableau
    Par bibi2607 dans le forum ASP
    Réponses: 9
    Dernier message: 17/02/2005, 09h54
  3. Réponses: 2
    Dernier message: 08/04/2004, 16h30
  4. Comment faire un Drag&Drop sur un tableau
    Par Stef.web dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2003, 13h12
  5. [VBA-E] Dim dynamique sur un tableau
    Par Vince69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2002, 13h32

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