Problème: HashTables

Résolu
Lestat_2070 Messages postés 71 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 5 mars 2007 - 4 oct. 2005 à 18:38
Lestat_2070 Messages postés 71 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 5 mars 2007 - 5 oct. 2005 à 13:10
Bonjour à tous,

J'ai essayé de me mettre un peu au hashtables, c'est vraiment rapide par rapport aux writeini et aux readini .
Seulement, dans ma folle avancée là dedans, je me retrouve pris au
piege lol. Je m'explique: je dispose d'un dialogue, et dans celui-ci se
trouve un champ, qui doit être sauvegardé dans la partie 'data' de mon
item. Côté code, ca donne:

$hget(tablex,cfg) > pour lister le comptenu de cfg, présent dans la 'table'

alias rep { hadd tablex cfg $reptok($hget(tablex,cfg),$gettok($hget(tablex,cfg),$1,9),$2,9) } > pour changer le contenu d'une partie de cfg (j'ai oublié de dire que cfg était tokenisée), et pour utiliser celà, je fais un rep 1 4 et mon premier élément devient 4 .

Donc, c'est là que ca commence à se corser lol ^^. En effet, quand je fais un rep 5 $did(74)
(pour mettre à jour le token 5, en lui mettant le contenut du champ
74), eh bien, si le champ contient une virgule (dans la configuration
d'un message automatique, par exemple), je l'ai dans l'os comme on dit
lol .

On peux penser que je me casse un peu la tête pour rien, et que je
devrai mettre chaque élément de cfg sous forme d'item, mais vu que cfg
n'est pas le seul item de la tablex... bah vous pouvez facilement
imaginer le bordel que ca donne quand je regarde ma table lol ^^. Donc,
si quelqu'un à une petite astuce pour moi, j'en serai très content ! Merci de m'avoir lu, et merci d'avance à ceux qui auront le courage de me répondre

7 réponses

Lestat_2070 Messages postés 71 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 5 mars 2007
5 oct. 2005 à 13:10
Re ^^

Désolé du tripple post , mais j'ai trouvé la solution (enfin ^^). Je viens de m'appercevoir que j'ai trop réfléchit pour rien lol, se code suffit: $rep(5,$did($dname,74))
(et le contenu du champ 74 est totalement dans le token 5, dans la
partie data de cfg (lui même dans la tablex lol)). Voilà, c'était
vraiment tout bête . Merci quand même à Fjxokt !
3
Lestat_2070 Messages postés 71 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 5 mars 2007
4 oct. 2005 à 18:46
Oups, je me suis trompé, c'est dans le cas où l'on met un espace (dans mon test, c'était une virgule et un espace)
0
fjxokt Messages postés 840 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 25 février 2009 1
4 oct. 2005 à 19:59
bon j'ai pas tout compris a ton probleme

mais pourquoi ne crée tu pas tout simplement plusieurs items, au lieu de tout "quicher" dans un seul ?



sinon si c'est lorsque tu as un espace que ça foire, tu n'as qu'a tout
simplement le remplacer par un char pas tres utilisé (genre $chr(248) )
0
Lestat_2070 Messages postés 71 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 5 mars 2007
4 oct. 2005 à 20:52
Bonsoir Fjxokt ^^

Oui lol, j'avoue c'est pas très bien expliqué (je suis pas doué pour ca
(pour l'ircscript aussi lol))... en gros, si le $2, dans

hadd tablex cfg $reptok($hget(tablex,cfg),$gettok($hget(tablex,cfg),$1,9),$2,9),
bah ca foire lol... plus précisément, il ne me prends pas ce qui se
trouve après l'espace. Pour en revenir à plusieurs items, je
préfererais ne pas en avoir 50 lol... c'est tout ^^; et puis vu la
rapidité des hashtables, c'est pas quelques identifieurs de tokens qui
vont ralentir le truc, au point qu'un readini soit plus rapide non ? (et vu qu'ils y a des experts sur ce site ).

Mouais, je vais essayer un $reptok (par dessus lol), pour changer
l'espace en un $chr(x), meme s'il faut le réutiliser un autre $reptok
pour remplacer le caractère ascii en espace (comme avant). Merci Fjxokt


note: j'aurai pensé qu'un truc dans le rep 5 $did(74), suffirai à lui faire prendre tout le contenu de $did(74).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fjxokt Messages postés 840 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 25 février 2009 1
4 oct. 2005 à 21:00
n'oublie pas qu'un $replace est plus rapide qu'un $reptok ;-)
0
Lestat_2070 Messages postés 71 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 5 mars 2007
4 oct. 2005 à 21:02
Ah, alors je vais tenter un $reptok, merci !
0
Lestat_2070 Messages postés 71 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 5 mars 2007
5 oct. 2005 à 13:01
Bonjour ^^

Oups, je voulais dire $replace, désolé ^^

Bah... finalement, remplacer les espaces par un autre caractère ne sert à rien lol. Je m'explique: j'ai fait des tests:

Ici, je vais lancer l'allias: if $did == 80 { rep 5 $did(74) | rep 13 $did(82) | rep 6 $did(72) }

L'allias est là:

alias rep {

echo -ta $1 -- $2

hadd ircutils cfg $reptok($hget(ircutils,cfg),$gettok($hget(ircutils,cfg),$1,9),$2,9)

}

Lorsque le champ 74 contient un espace, evidement le $2 de l'allias
retourne que le début (par exemple, s'il s'agit d'un 'bonjour à tous',
le $2 contiendra bonjour, $3 à et $4 tous). Donc, me revoilà à la case
départ . Il faudrait peut être faire un allias du genre:

alias espace_fix { var %a = 1, %b | while ($ $+(%a)) { var %b $addtok(%b,$ $+(%a),32) } | inc %a } | return %b }

Je teste et je vous tiens au courant ^^
0
Rejoignez-nous