[PERL] la commande push et une table de hash

Résolu/Fermé
yannou15 Messages postés 2 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007 - 4 nov. 2007 à 15:14
 nadjiboooo - 8 mars 2011 à 23:20
Bonjour,

je m'excuse par avance si la réponse a déjà été donnée, j'ai cherché (rapidement) et je n'ai pas trouvé.

Voici mon problème :

- j'ai un fichier CSV que je met dans une table de hachage pour pouvoir le manipuler. Je lis le fichier ligne par ligne et en séparant avec split et j'affecte mes valeurs dans une table de hachage.

- je veux ensuite garder mes tables de hachage créées à chaque ligne dans un tableau.

je fais donc un push (@tab,{%hash});

Mais mon tableau ne récupère que le pointeur vers cette table de hachage, ce qui est nettement plus embetant pour moi.





Est il possible avec la commande push d'affecter à mon tableau une table de hachage (clés et valeurs) plutot que l'adresse du pointeur ?




Merci d'avance

Cdt.

3 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
4 nov. 2007 à 22:58
Salut,

en fait tu ne sais pas accéder à ton hash

Voici un exemple, à toi d'adapter
#!/usr/bin/perl
use strict;use warnings;

my (@tab, %h1, %h2);

%h1 = (
        cle1 => 'toto',
        cle2 => 'titi',
      );

%h2 = (
        cle3 => 'tata',
        cle4 => 'tutu',
      );

push @tab,\%h1,\%h2;

foreach (@tab){
        foreach my $k(sort keys %{$_}){
                print "$k => $_->{$k}\n";
        }
}
0
voici une table de hash :(vous pouvez facilement ajout les inf dans les truct)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct el
{
char cle[10];
struct el *suiv;
}m;
m *table[20]; char ch[10],ac[10]; int x;

int hash(void)
{
int d,h,j; h=0;
for(d=0;ch[d];d++)
{
j=ch[d];
h+=j;
}
h=(h*d)%20;

return(h);
}
m* recherche(int i)
{m *l;
for(l=table[i];l!=NULL&&strcmp(l->cle,ch)!=0;l=l->suiv);
return(l);
}



m* cree()
{m *l;
l=(m*)malloc(sizeof(m)); l->suiv=NULL; strcpy(l->cle,ch);
return(l);
}


int action()
{
int u,i; u=ac[0];i=u-48;
while(strlen(ac)!=1||i>3||i<0)
{
printf("\nrelire les remarques ci dessus et apres rentrer votre action :");scanf("%s",ac); u=ac[0];i=u-48;
}
return(i);
}




main()
{
m *r,*s;
int i,j,h,act;
for(i=0;i<20;i++)
table[i]=NULL;
printf("\n\n\n\ndes remarques sur les actions du programme : ");
printf("\n\n pour inserer une tel element taper 1 ");
printf("\n pour rechercher un tel element s'il existe taper 2 ");
printf("\n pour supprimer un tel element taper 3");
printf("\n pour sorter que le programme taper 0 ");
printf("\n\n choisir votre action : "); scanf("%s",ac); act=action();
while(act==1||act==2||act==3)
{
if(act==1)
{
printf("\nentre votre cle : ");scanf("%s",ch); h=hash();; r=recherche(h);
if(r!=NULL)printf("\ncette cle est existe deja !!");
else
{
s=cree();
s->suiv=table[h]; table[h]=s;
for(s=table[h];s!=NULL;s=s->suiv)printf("[%s]",s->cle);
}
}/*if(act==1)*/
if(act==2)
{
printf("\nentre la cle recherchee : "); scanf("%s",ch); h=hash(); r=recherche(h);
if(r!=NULL)printf("\nla cle '%s' ets existe ",r->cle);
else
{
printf("\ncette cle n'existe pas voullez vous l'inseree ?(oui=1/non=0) : "); scanf("%d",&i);
if(i==1)
{
s=cree();
s->suiv=table[h]; table[h]=s;
}
}
}/*if(act==2)*/
if(act==3)
{
printf("\nentre la cle que voulez supprimer : "); scanf("%s",ch); h=hash(); r=recherche(h);
if(r==NULL)printf("\ncette cle n'existe pas !!");
else
{
if(strcmp(table[h]->cle,ch)==0)
{
s=table[h]; table[h]=s->suiv; free(s);
}
else
{
for(s=table[h];s->suiv!=r;s=s->suiv);
s->suiv=r->suiv; free(r);
}
}
}/*if(act==3)*/
printf("\n\n choisir votre action : "); scanf("%s",ac); act=action();
}/*while(act==1||act==2)*/
}/*main*/
et pour plus d'information sur c++ (www.nadjiboooo@gmail.com)
0
yannou15 Messages postés 2 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 01:05
Merci,

en fait j'ai utilisé cette façon de faire, mais en faisant directement une table de hachage de tables de hachage, cela revient quasiment au même en fait.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
5 nov. 2007 à 07:20
Salut,

affiche ton code pour voir, ainsi qu'une partie de fichier que tu traites.
quelques explications pour comprendre ce que tu veux faire seront bienvenues.
0