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 :

[Perl] Création hash de hash, BDD


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut [Perl] Création hash de hash, BDD
    Bonjour,

    J'ai un problème en Perl que je n'arrive a résoudre avec mes propres connaissance et recherche sur google.

    Je vous expose mon problème :
    Je récupère depuis une base de donnée deux tableaux contenant dans le 1er des arborescences de dossiers et dans le second une liste de fichier.
    Je souhaiterai à partir de ces deux tableaux créer un hash de hash par rapport au dossier et dont la valeur final et un tableau contenant les fichiers des dossiers.

    Sachant que l'arborescence n'est pas fixe, il peut y avoir des sous dossiers,... .
    Cela ne me pose pas de problème en "statique" comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my @fichierdossier = ("test.txt","documentation.doc");
    my @fichiersousdossier = ("read.pl","liste.pl");
    my @fich1 = ("fichier1.txt", "fichier4.txt");
    my @fich2 = ("fichier2.txt", "fichier5.txt");
    my @fich3 = ("fichier3.txt", "fichier6.txt");
    my %hash2 = ();
    $hash2{"user1"}{"dossier1"} = \@fichierdossier;
    $hash2{"user1"}{"dossier2"}{"sousdossier"} = \@fichiersousdossier;
    $hash2{"user2"}{"dossier2"}{"autredossier"} = \@fich1;
    $hash2{"user2"}{"dossier3"}{"encoredossier"} = \@fich2;
    $hash2{"user2"}{"dossier3"}{"otherdossier"}{"sousousdossier"} = \@fich3;
    Ce qui me donne :
    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
    28
    29
    30
    31
    32
    33
    34
    35
     
    $VAR1 = 'user1';
    $VAR2 = {
              'dossier2' => {
                              'sousdossier' => [
                                                 'read.pl',
                                                 'liste.pl'
                                               ]
                            },
              'dossier1' => [
                              'test.txt',
                              'documentation.doc'
                            ]
            };
    $VAR3 = 'user2';
    $VAR4 = {
              'dossier3' => {
                              'encoredossier' => [
                                                   'fichier2.txt',
                                                   'fichier5.txt'
                                                 ],
                              'otherdossier' => {
                                                  'sousousdossier' => [
                                                                        'fichier3.txt',
                                                                        'fichier6.txt'
                                                                      ]
                                                }
                            },
              'dossier2' => {
                              'autredossier' => [
                                                  'fichier1.txt',
                                                  'fichier4.txt'
                                                ]
                            }
            };
    En revanche, le faire d'un façon "dynamique" me pose des soucis.
    J'ai bien trouvé sur internet une façon de créer un hash de hash mais du coup je ne vois psa (comprend pas) à quel moment je peux passer la référence de mon tableau.
    Voici dans les grandes lignes mon script actuel :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #!/usr/bin/perl -w
    use strict;
    use List::Compare;
    use Data::Dumper;
    use DBI;
    use CGI;
     
    my $co = new CGI;
    my $database="baseTest";
    my $hostname="localhost";
    my $login = "root";
    my $mdp = "****";
     
    my $dsn = "DBI:mysql:database=$database;host=$hostname";
    my $dbh = DBI->connect($dsn, $login, $mdp) or die "Echec connexion";
     
    my $requete = "SELECT localisation FROM dossiers ";
    my $sth = $dbh->prepare($requete);
     
    $sth->execute();
     
    my @dossiers = $sth->fetchrow_array;
     
    $sth -> finish;
     
     
    my $ref = ();
    my $last = ();
    my %hash = ();
    my @fichiers = ();
    my @splitdossier = ();
    foreach my $var (@dossiers) {
    	$requete = "SELECT name FROM fichiers WHERE locatedossier=$var";
    	$sth = $dbh->prepare($requete);
    	$sth->execute();
    	@fichiers = $sth->fetchrow_array;
    	$sth -> finish;
     
    	@splitdossier = ();
    	@splitdossier = split('/', substr($var,6));
     
    	$ref=\%hash;
    	$last=pop(@splitdossier);
    	foreach (@splitdossier){
    		$ref->{$_}={} unless (ref($ref->{$_}));  #Nouvelle ligne
    		$ref=$ref->{$_};
    	}	
    	$ref->{$last}++;
    }
     
    $dbh -> disconnect;
     
    print Dumper(%hash);
    Le dump du hash donne ceci :
    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
     
    $VAR1 = 'user1';
    $VAR2 = {
              'dossier1' => 1,
              'dossier2' => {
                             'sousdossier' => 1
                           }
            };
    $VAR3 = 'user2';
    $VAR4 = {
              'dossier' => 1,
              'autredossier' => {
                             'autresousdossier' => 1
                           }
            };
    J'ai bien la structure voulue, mais ne sait pas quand affecter au hash mon tableau. Actuellement j'ai des 1 partout...

    Si quelqu'un a une idée sur une possible solution.

    Merci d'avance,
    Cordialement,
    Julien.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Le 1 vient probablement de cette ligne :
    Essaye de la remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$ref->{$last} = [@fichiers];

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut
    Oui a priori mon problème venait de la.
    Merci beaucoup pour votre réactivité.

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

Discussions similaires

  1. Perl, Fichier textes, et hashes
    Par Arnaud62 dans le forum Langage
    Réponses: 9
    Dernier message: 04/01/2008, 13h07
  2. Parcours d'un hash de hash de hash
    Par ngere dans le forum Langage
    Réponses: 5
    Dernier message: 06/07/2005, 10h53
  3. Réponses: 2
    Dernier message: 09/03/2005, 15h35
  4. [langage] hash de hash
    Par Kinethe dans le forum Langage
    Réponses: 17
    Dernier message: 27/08/2004, 14h22
  5. [langage] probleme avec un hash de hash
    Par planetevoyage dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2003, 13h55

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