J'ai un sou=E7i concernant une table de Hash et l'utilisation
(=E9ventuelle) de pattern.
Le probl=E8me auquel je suis confront=E9 est relativement simple. J'ai un
=E9norme fichier avec de multiples entr=E9es tagg=E9es par ID. J'utlise
donc un premier script d'indexation qui va me cr=E9er une table de hash
avec comme cl=E9 l'ID, et comme valeurs l'offset de l'entr=E9e, ainsi que
la longueur de l'entr=E9e.
Le Tue, 27 Sep 2005 17:22:46 -0700, pennguen a écrit :
Mon souçi, c'est si je veuxplusieurs entrées... Je m'explique... Je souhaiterais avoir toutes les entrées XXXX_AB... Et là, c'est chaud.
Si tes ID sont numériques, pourquoi ne pas utiliser un AoHoH? hash[IDnum]{ID_alpha}
Comme ça tu peux utiliser une tranche de tableau :
@hash[2345-3542]->{ID_alpha}
-- Quidquid latine dictum sit, altum sonatur
Jacques Caron
Salut,
On Wed, 28 Sep 2005 02:22:46 +0200, wrote:
my @bingo=grep ($_ =~ /_AB/,keys %hash);
Là c'est plus rapide... mais c'est pas l'extase (mon hash est GROS). [...]
2) Connaissez vous une autre méthode, même radicalement différente, mais plus rapide.
Si le format des clefs est bien connu et que tu sais quels types de clefs t'intéressent (par exemple c'est toujours nnnn_XX et tu veux des séries *_XX), tu peux découper d'avance en plusieurs niveaux de hash, par exemple $hash{AB}{1234}. Dans ce cas tu pourras facilement récupérer toutes les valeurs pour $hash{AB}...
Sinon tu peux voir du côté de dbm (perldoc -f dbmopen, perldoc DB_File...), avec un B-Tree, à condition que tes recherches s'appuient sur le *début* de ta clef. Si pour le moment c'est toujours la fin qui t'intéresse, il suffit d'inverser, bien sûr.
Jacques.
Salut,
On Wed, 28 Sep 2005 02:22:46 +0200, <pennguen@yahoo.fr> wrote:
my @bingo=grep ($_ =~ /_AB/,keys %hash);
Là c'est plus rapide... mais c'est pas l'extase (mon hash est GROS).
[...]
2) Connaissez vous une autre méthode, même radicalement différente,
mais plus rapide.
Si le format des clefs est bien connu et que tu sais quels types de clefs
t'intéressent (par exemple c'est toujours nnnn_XX et tu veux des séries
*_XX), tu peux découper d'avance en plusieurs niveaux de hash, par exemple
$hash{AB}{1234}. Dans ce cas tu pourras facilement récupérer toutes les
valeurs pour $hash{AB}...
Sinon tu peux voir du côté de dbm (perldoc -f dbmopen, perldoc
DB_File...), avec un B-Tree, à condition que tes recherches s'appuient sur
le *début* de ta clef. Si pour le moment c'est toujours la fin qui
t'intéresse, il suffit d'inverser, bien sûr.
Là c'est plus rapide... mais c'est pas l'extase (mon hash est GROS). [...]
2) Connaissez vous une autre méthode, même radicalement différente, mais plus rapide.
Si le format des clefs est bien connu et que tu sais quels types de clefs t'intéressent (par exemple c'est toujours nnnn_XX et tu veux des séries *_XX), tu peux découper d'avance en plusieurs niveaux de hash, par exemple $hash{AB}{1234}. Dans ce cas tu pourras facilement récupérer toutes les valeurs pour $hash{AB}...
Sinon tu peux voir du côté de dbm (perldoc -f dbmopen, perldoc DB_File...), avec un B-Tree, à condition que tes recherches s'appuient sur le *début* de ta clef. Si pour le moment c'est toujours la fin qui t'intéresse, il suffit d'inverser, bien sûr.
Jacques.
Srand
Pour rester dans le même esprit tu peux utiliser le module DBI (sympa pour tester sqlite3), et créer une table à 2 colonnes. Ensuite tu n'as plus qu'à effectuer un select avec une close like '%_AB%' pour retrouver tes données. Tu peux aussi profiter de l'indexation dans ce cas (selon la définition de ta table)
Pour rester dans le même esprit tu peux utiliser le module DBI (sympa
pour tester sqlite3), et créer une table à 2 colonnes. Ensuite tu
n'as plus qu'à effectuer un select avec une close like '%_AB%' pour
retrouver tes données. Tu peux aussi profiter de l'indexation dans ce
cas (selon la définition de ta table)
Pour rester dans le même esprit tu peux utiliser le module DBI (sympa pour tester sqlite3), et créer une table à 2 colonnes. Ensuite tu n'as plus qu'à effectuer un select avec une close like '%_AB%' pour retrouver tes données. Tu peux aussi profiter de l'indexation dans ce cas (selon la définition de ta table)
pennguen
Merci a vous 3 pour vos explications...
Le format des clés n'étant pas connu, je vais tenter du DBI... connais déjà, mais pas toutes ses subtilités. J'ai beaucoup à apprendre. Je regarde également du côté des B-Tree... Ca me botte bien, j'aime bien les arbres.. ;o)
Merci encore!
Merci a vous 3 pour vos explications...
Le format des clés n'étant pas connu, je vais tenter du DBI...
connais déjà, mais pas toutes ses subtilités. J'ai beaucoup à
apprendre. Je regarde également du côté des B-Tree... Ca me botte
bien, j'aime bien les arbres.. ;o)
Le format des clés n'étant pas connu, je vais tenter du DBI... connais déjà, mais pas toutes ses subtilités. J'ai beaucoup à apprendre. Je regarde également du côté des B-Tree... Ca me botte bien, j'aime bien les arbres.. ;o)