mr_orus1
Messages postés89Date d'inscriptionsamedi 24 janvier 2004StatutMembreDernière intervention 9 avril 2008
-
20 oct. 2006 à 11:06
mr_orus1
Messages postés89Date d'inscriptionsamedi 24 janvier 2004StatutMembreDernière intervention 9 avril 2008
-
3 nov. 2006 à 21:48
Bonjour,
voilà, j'aimerai trier des scores dans une table hash par item
j'ai fait ce code qui ne fait pas ce que je voudrais
alias synorang {
hmake test 50
var %x 1
while (%x <= $ini(synant.ini,scores,0)) {
set %y $ini(synant.ini,scores,%x)
hadd test $readini(synant.ini,scores,%y) %Y
inc %x
}
}
dans ma table hash ça me retourne, par exemple :
test item 1 machin 6
test item 2 truc 3
test item 3 muche 25
et j'aimerai faire ça :
test item 1 muche 25
test item 2 machin 6
test item 3 truc 3
si quelqu'un a une piste ou une idée, merci par avance
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 20 oct. 2006 à 16:52
Si les scores sont sauvegardé dans un .txt, pourquoi les mettres dans une hash table ?
Le mieux est de laissé les scores dans la hash table de cette facon la :
table 1 score1\pseudo1
table 2 score2\pseudo2
ensuite tu fait un alias qui trie avec $sorttok
alias Gatri {
var %a 1 ,%b = $hget(table,0).item while (%a <%b) { var %sort %sort $hget(table,%a).item | inc %a }var %sorttok $sorttok(%sort,32,nr) ,%a 1
while (%a <= %b) { hadd -m %a $token(%sorttok,%a,32) | inc %a }
}
des que ta un nouveau score pour quelqu'un tu verifie qu'il n'existe pas dans la table avec $hfind(table,*pseudo,1,w).data, si il existe, tu sauvegarde ses scores dans une var globale que tu ajoutera au score final, tu l'efface ( le $hfind retourna le nom de l'item et tu as juste a hdel -m table "$hfind" )
Ensuite tu ajoutes le pseudo et le score + l'ancien score s'il y en a un comme ca :
hadd -m table $calc($hget(table,0).item + 1) $+(scoretotal\pseudo) et tu lance l'alias qui tri,
ensuite $hget(table,1) retourne le score et le pseudo du premier etc :)
mr_orus1
Messages postés89Date d'inscriptionsamedi 24 janvier 2004StatutMembreDernière intervention 9 avril 2008 3 nov. 2006 à 21:48
Bah en fait je mettais dans une table hash parce que de mon fichier .ini, avec la methode de tri que j'employais, ça me mettait tout dans une %var, mais au final, si il y a trop d'inscits, ça rempli la %var et àa me met
*/set ligne trop longue
en fait mon code initial est comme ça (je crois que tu m'a aidé à le faire même :p)
alias classe.1 { var %a 1 , %b $ini(synant.ini,scores,0)
while (%a <= %b) {
var %score = %score $readini(synant.ini,scores,$ini(synant.ini,scores,%a)) $+ - $+ $ini(synant.ini,scores,%a)
inc %a
}
var %tri = $sorttok(%score,32,nr)
var %m = $findtok(%tri,$wildtok(%tri,$+(*-,$nick),1,32),1,32)
msg %synant $syn.top ~~~ $nick occupe la %m $+ $iif(%m <= 1,ère,éme) place avec $readini(synant.ini,scores,$nick) $iif($readini(synant.ini,scores,$nick) <= 1,point,points) (peek)