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 :

Question traitement des données (Question générale)


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Par défaut Question traitement des données (Question générale)
    Bonjour,

    Je me posais la question des traitements des données quand celui-ci deviennent important.

    En générale, quand j'ai 4 donnés, je fais des hash de hash.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $ref->{"$1"}->{"$2"}->{"$3"} = $4 ;
     
    # ou un truc dans ce style.
     
    push @{$ref->{"$1"}->{"$2"}->{"$3"}} , $4
    Mais comment vous faite si le fichier à traiter contient plus de 20 colonnes par exemple ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    # Colonne type 
    nom prenom age lieu profession etude mail ... etc .. etc. .
    merci

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Hello,

    j'ai une méthode que j'applique au boulot sur quasi tous mes scripts Perl. La plupart de ces derniers travaille avec une base de données un peu spéciale (pas de module DBI pour ce type de SGBD et aucun espoir, même dans mes rêves , de pouvoir bosser directement avec elle via la mémoire) et chacun de mes programmes doit traiter les données retournées par la bdd sous forme d'un fichier txt.

    Je m'arrange dans ce cas pour que la ligne 1 du fichier extrait contienne uniquement les noms des champs de la bdd, noms que je splitte pour les stocker à part dans une liste.

    Ensuite, à partir des lignes suivantes, je choisis un champ fiable (c-a-d dont la valeur est unique) et m'en sers en tant que clé.

    Un petit exemple sera plus concis et clair qu'un long discours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # exemple de fichier : resultat.txt
    # séparateur entre les valeurs = tabulation
    ID NOM PRENOM AGE PROFESSION DEPARTEMENT SERVICE
    127 TOTO Titi 32 Nainformaticien DSI SI
    412 TATA Tutu 24 Nainformaticien DSI SI
    Et le script qui extrait les données avec mise en forme dans un hash :

    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
    use strict;
     
    my @Champs;
    my %Hash;
     
    open(IN, "resultat.txt") or die("acces fichier données err : $!\n");
    while<IN>
    {
        chomp();
     
        # récupération des noms de champs
        if ($. == 1)
        {
            @Champs = split(/\t/, $_);
        }
        else
        {
            @_ = split(/\t/, $_);
     
            # le champ ID va servir de clé pour mon hash
            for(my $i = 1; $i < scalar(@Champs); ++$i)
            {
                $Hash{$_[0]}->{$Champs[$i]} = $_[$i];
            }
        }
    }
    close(IN);
    Et mon hash se retrouve avec cette forme (je prend juste exemple sur le 1er enregistrement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $Hash{127}->{NOM} = TOTO
    $Hash{127}->{PRENOM} = Titi
    $Hash{127}->{AGE} = 32
    $Hash{127}->{PROFESSION} = Nainformaticien
    $Hash{127}->{DEPARTEMENT} = DSI
    $Hash{127}->{SERVICE} = SI
    Ainsi, je peux avoir juste 3-4 champs en sortie selon les besoins du script comme une trentaine, la méthode reste unique et fonctionne à chaque fois.


  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Par défaut
    Bonjour,

    Merci, je vois un peu mieux la facon de structurer mes données.
    Par contre, c'est la premiere fois que je vois cette facon d'ecrire un hash.

    Comment on fait pour afficher/extraire les datas ?

    merci

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    En repartant de mon script initial, voici un petit exemple d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach my $cle(keys %Hash)
    {
        print "identifiant = $cle :\n";
        foreach my $champ(@Champs)
        {
            print "\t$champ = $Hash{$cle}->{$champ}\n";
        }
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Par défaut
    Bonjour,

    Merci beaucoup.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/09/2012, 11h52
  2. Réponses: 9
    Dernier message: 26/04/2012, 17h32
  3. Question Reccuperer des données sur differents serveur
    Par adibou666 dans le forum kettle/PDI
    Réponses: 5
    Dernier message: 02/06/2009, 16h14
  4. [Question ]Gestion des données en Vacance
    Par Davidbrcz dans le forum La taverne du Club : Humour et divers
    Réponses: 2
    Dernier message: 14/07/2008, 18h58
  5. Question : persistance des données
    Par maxime_c dans le forum Hibernate
    Réponses: 1
    Dernier message: 22/04/2008, 21h10

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