Les Allergies
Alimentaires
Posez votre question Signaler

[PERL] la commande push et une table de hash [Résolu]

yannou15 2Messages postés 4 novembre 2007Date d'inscription - Dernière réponse le 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.
Lire la suite 

[PERL] la commande push et une table de hash »

4 réponses
Réponse
+0
moins plus
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";
        }
}
nadjiboooo - 8 mars 2011 à 23:20
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)
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Ce document intitulé « [PERL] la commande push et une table de hash » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?