[PERL] la commande push et une table de hash
Résolu
yannou15
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
nadjiboooo -
nadjiboooo -
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.
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
Salut,
en fait tu ne sais pas accéder à ton hash
Voici un exemple, à toi d'adapter
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"; } }
#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)