Retourner la frequence d'un substring dans un string

no0bzor Messages postés 2 Date d'inscription mercredi 3 décembre 2008 Statut Membre Dernière intervention 4 décembre 2008 - 3 déc. 2008 à 15:44
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 - 6 déc. 2008 à 00:55
Bonjour à tous,
 Je suis débutant en scripting IRC et  j'ai un probleme auquel je ne trouve pas de solution .
Disons que j'ai une variable :
%var = a,b,c,d,a,c,c,a,a

1) Je voudrais  arriver a retourner la valeur du substring qui apparait le plus souvent (dans l'exemple , a) . 

2) Je voudrais également , si possible , retourner le classement des substrings suivant leur fréquence et par ordre décroissant .  ça donnerait quelque chose comme ça : a,c,b,d 

Mais actuellemnt je suis bloqué , je n'ai pas trouvé de commande de mIRC pour qui puisse m'aider faire ça  et je n'arrive pas a visualiser le moyen de faire ça avec des tokens  non plus .

Toute aide est le bienvenue :-)

Merci d'avance .

5 réponses

cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
3 déc. 2008 à 18:30
alias mosttok {
var %a $numtok($$1,$$2) ,%t ,%s
while (%a) {
if (!$istok(%t,$gettok($1,%a,$2),$2)) {
%t = $addtok(%t,$gettok($1,%a,$2),$2)
%s = $addtok(%s,$findtok($1,$gettok($1,%a,$2),0,$2) $gettok($1,%a,$2),32)
}
dec %a
}
 %s = $sorttok(%s,32,nr)
return $iif($prop == sort,$regsubex(%s,/((^| $+ $2 $+ )\d+  )/g,),$gettok($gettok(%s,1,$2),2,32))
}

Bon c'est non teste, mais sa s'utilise comme ca :

$mostok(chaine,valeur ascii)

par exemple var %var = a,b,c,d,a,c,c,a,a | echo -a $mostok(%var,44) affichera 'a'

var %var = a,b,c,d,a,c,c,a,a | echo -a $mostok(%var,44).sort affichera 'a,c,b,d'
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
3 déc. 2008 à 18:32
Attention dans mes exemples il manque le deuxieme t de $mosttok
0
no0bzor Messages postés 2 Date d'inscription mercredi 3 décembre 2008 Statut Membre Dernière intervention 4 décembre 2008
4 déc. 2008 à 15:05
Ok merci pour ton aide .

Je viens d'essayer avec tes deux exemples et ça me retourne :

 Dans le 1er exemple : 3

Dans le 2eme : 3 1 1 a c d b 

Je vais essayer de trafiquer un peu le script pour voir ce que ça donne  .

Merci beaucoup en tout cas :-)
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
4 déc. 2008 à 17:53
J'ai ecris le code tres rapidement et sans le tester, je le testerai plus tard et je verrai pour une correction :)
0

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

Posez votre question
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
6 déc. 2008 à 00:55
Version corrigé :

alias mosttok {  var -s %a $numtok($$1,$$2) ,%t ,%s ,%p $+(/,$chr(40),^|,$chr($2),,$chr(41),(\d+ )/g)
  while (%a) {
    if (!$istok(%t,$gettok($1,%a,$2),$2)) {
      %t = $addtok(%t,$gettok($1,%a,$2),$2)
      %s = $addtok(%s,$findtok($1,$gettok($1,%a,$2),0,$2) $gettok($1,%a,$2),$2)
    }
    dec %a
  }
  var -s  %s = $sorttok(%s,$2,nr)
  return $iif($prop == sort,$regsubex(%s,%p,\1),$gettok($gettok(%s,1,$2),2,32))
}
0
Rejoignez-nous