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 :

Comment trier un Hash sur plusieurs paramètres ?


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 138
    Points
    138
    Par défaut Comment trier un Hash sur plusieurs paramètres ?
    Bonjour, à tous,

    Je récupère le contenu d'un fichier INI dans un Hash via Config::IniFiles et j'aurai besoin de trier ce Hash sur le paramètre "Source" et dans ce tri sur les clés en ordre décroisant.

    Fichier INI :
    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
    [Backup_1]
    Source = *
    Destination = /usr/local/HyperFile/backup/Sauvegardes/2008/09/19/10-25/1/
    Date = 20080919102541397
    Description = Sauvegarde lancée par le CCHF le 19/09/2008.
    State = 1
    [Backup_2]
    Source = toto
    Destination = /usr/local/HyperFile/backup/Sauvegardes/2008/09/19/12-12/2/
    Date = 20080919121203251
    Description = Sauvegarde lancée par le CCHF le 19/09/2008.
    State = 1
    [Backup_3]
    Source = *
    Destination = /usr/local/HyperFile/backup/Sauvegardes/2008/09/19/12-13/3/
    Date = 20080919121340342
    Description = Sauvegarde lancée automatiquement par une tâche planifiée
    State = 1
    Ce qui devrait donner :
    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
    [Backup_3]
    Source = *
    Destination = /usr/local/HyperFile/backup/Sauvegardes/2008/09/19/12-13/3/
    Date = 20080919121340342
    Description = Sauvegarde lancée automatiquement par une tâche planifiée
    State = 1
    [Backup_1]
    Source = *
    Destination = /usr/local/HyperFile/backup/Sauvegardes/2008/09/19/10-25/1/
    Date = 20080919102541397
    Description = Sauvegarde lancée par le CCHF le 19/09/2008.
    State = 1
    [Backup_2]
    Source = toto
    Destination = /usr/local/HyperFile/backup/Sauvegardes/2008/09/19/12-12/2/
    Date = 20080919121203251
    Description = Sauvegarde lancée par le CCHF le 19/09/2008.
    State = 1
    Je ne sais pas comment faire cela.

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tie my %cfg, 'Config::IniFiles', (-file => "History.dat");
     
    foreach my $section (keys %cfg) {
            print "[$section]\n";
            foreach my $param (keys %{$cfg{$section}})
            {
                    print "$param = $cfg{$section}{$param}\n";
            }
    }
    Merci d'avance pour vos conseils.

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Je ne connais pas le module Config::IniFiles

    Mais de façon générale pour un hash (ou un array). Il existe la fonction sort.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach my $section (sort keys %cfg)
    sort keys %cfg => tri alphabétique
    sort {$a<=>$b} keys %cfg => tri numérique croissant
    sort {$b<=>$a} keys %cfg => tri numérique décroissant
    http://perl.developpez.com/faq/?page...nD4#sectionD4b
    http://perldoc.perl.org/functions/sort.html

    Sinon, si tu as besoin de tris plus complexes
    http://articles.mongueurs.net/magazines/linuxmag48.html

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 138
    Points
    138
    Par défaut
    Bonjour, Jasmine,

    Merci pour ta réponse.

    Cela fonctionne comme je voulais. Finalement je fais les tris directement sur les paramètres "Source" et "Date" et non sur la clé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach my $section (sort {$cfg{$a}{'Source'} cmp $cfg{$b}{'Source'} || $cfg{$b}{'Date'} <=> $cfg{$a}{'Date'}} keys %cfg)
    Concernant Config::IniFiles, il permet de lire et de modifier les fichiers à la structure INI.

    http://search.cpan.org/~wadg/Config-...38/IniFiles.pm

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

Discussions similaires

  1. Comment installer Microsoft Office sur plusieurs pc?
    Par Lanny dans le forum Autres Logiciels
    Réponses: 14
    Dernier message: 10/01/2006, 09h01
  2. trier un stringgrid sur plusieurs colonnes
    Par renegade55 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 13/12/2005, 17h30
  3. [XSLT] - Trier un fichier sur plusieurs critères
    Par ytse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 17h26
  4. Comment ecrire du code sur plusieurs lignes?
    Par tooneygirl dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 17h03
  5. Réponses: 4
    Dernier message: 03/12/2004, 12h18

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