[code morse] encode/decode sans $replace

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 827 fois - Téléchargée 35 fois

Contenu du snippet

salut à vous,
donc il s'agit d'un addon pour "encoder" et "decoder" du language Morse (langage utilisé il y a bien longtemp pour les telegrammes, ancetre de nos telephones mobile..blablabla...)

Source / Exemple :


dialog morse {
  title "Le code Morse [Encode/Decode]"
  size -1 -1 171 118
  option dbu
  text "Texte normal :", 1, 2 2 36 8
  edit "", 2, 1 10 169 40, disable multi return vsbar
  text "Texte Morse :", 3, 2 57 35 8
  text "", 4, 3 50 167 8, disable
  edit "", 5, 1 65 169 40, disable multi return vsbar
  button "ok", 6, 114 107 23 9, default
  button "no", 7, 140 107 23 9, cancel
  radio "Norm", 11, 80 108 25 8
  radio "Morse", 12, 51 108 25 8
  text "? By Mrud ?", 8, 5 108 41 8, disable
}
on 1:dialog:morse:*:*:{
  if ($devent = init) {
    did -a $dname 4 $str($chr(151),33)
  }
  if ($devent = sclick) {
    if ($did = 6) { 
      if ($did(11).state) && ($did(2).text) { did -r $dname 5 
        var %i 1 | while (%i <= $did($dname,2).lines) {
          if ($did(morse,2,%i).len) { did -ema $dname 5 $sMorse($did($dname,2,%i)) $+ $iif($did(morse,2,$calc(%i +1)).len,$crlf) }
      inc %i } }
      if ($did(12).state) && ($did(5).text) { did -r $dname 2 
        var %i 1 | while (%i <= $did($dname,5).lines) {
          if ($did(morse,5,%i).len) { did -ema $dname 2 $sMorse($did($dname,5,%i)) $+ $iif($did(morse,5,$calc(%i +1)).len,$crlf) }
      inc %i } }
    }
    if ($did = 11) && ($did(11).state) { did -ne $dname 2 | did -mb $dname 5 }
    if ($did = 12) && ($did(12).state) { did -ne $dname 5 | did -mb $dname 2 }
  }
}
alias sMorse { $iif($left($1,1) = . || $left($1,1) = -,return $sDmor($1),return $sEmor($1)) }
alias sDmor {
  var %dmorse .-,a,-...,b,-.-.,c,-..,d,.,e,..-.,f,--.,g,....,h,..,i,.---,j,-.-,k,.-..,l,--,m,-.,n,---,o,.--.,p,--.-,q,.-.,r,...,s,-,t,..-,u,...-,v,.--,w,-..-,x,-.--,y,--..,z,.----,1,..---,2,...--,3,....-,4,.....,5,-.....,6,--...,7,---..,8,----.,9,-----,0,.-.-.-,.,-..-.,/,.-.-.,+,.----.,',-....-,-,-...-,=,---...,:,-.-.-.,;,.-..-.,",.-.-..,§,...-..-,$,..--.-,_,..--..,?,.--.-,à,-.-..,ç,.-..-,è,..-..,é  
  var %i 1 | while (%i <= $numtok($1,32)) {
    var %o 1 | while (%o <= $calc($numtok(%dmorse,44)/2)) {
    if ($gettok($1,%i,32) = $gettok(%dmorse,$calc((%o *2)-1),44)) { var %rez $instok(%rez,$gettok(%dmorse,$calc(%o *2),44),0,0) } | inc %o }
  if (%i = $numtok($1,32)) { return %rez } | inc %i }
}
alias sEmor {
  var %emorse  a,.-,b,-...,c,-.-.,d,-..,e,.,f,..-.,g,--.,h,....,i,..,j,.---,k,-.-,l,.-..,m,--,n,-.,o,---,p,.--.,q,--.-,r,.-.,s,...,t,-,u,..-,v,...-,w,.--,x,-..-,y,-.--,z,--..,1,.----,2,..---,3,...--,4,....-,5,.....,6,-.....,7,--...,8,---..,9,----.,0,-----,.,.-.-.-,/,-..-.,+,.-.-.,',.----.,-,-....-,=,-...-,:,---...,;,-.-.-.,",.-..-.,§,.-.-..,$,...-..-,_,..--.-,?,..--..,à,.--.-,ç,-.-..,è,.-..-,é,..-..
  var %i 1 | while (%i <= $len($1)) { 
    var %o 1 | while (%o <= $calc($numtok(%emorse,44)/2)) {
    if ($mid($1,%i,1) = $gettok(%emorse,$calc((%o *2)-1),44)) { var %rez $instok(%rez,$gettok(%emorse,$calc(%o *2),44),0,32)) } | inc %o }
  if (%i = $len($1)) { return %rez } | inc %i }
}

Conclusion :


j'ai pas utiliser de $replace donc je pens que c'est interessant.. non ?
niveau : initié, je ne pens pas qu'un debutant en mirc puisse comprendre le code, il fera que le pomper. Donc voilà.

A voir également

Ajouter un commentaire Commentaires
skotmarud Messages postés 116 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 26 janvier 2008
29 nov. 2004 à 14:36
SornDrixer je savais pas que ça pouvait ralentir le code :/ merci du conseil !

Et merci pour tout vos cmt ;)
cs_Asthar Messages postés 208 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 6 septembre 2005
27 nov. 2004 à 20:25
Inutile certes, le code morse ayant été abandonné, mais néanmoins joliment codé =)
8/10
cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 8
26 nov. 2004 à 17:49
L'idée est original, et c'est bien codé.

Une petite remarque :

while (%i <= $did($dname,5).lines)

Il est déconseillé de faire appel à un identifieur dans la condition d'une boucle, car à chaque boucle, il va devoir aller chercher sa valeur.
Donc stock $did($dname,5).lines dans une var
Dans ce code là, la perte de vitesse est très très minime, mais dans un code plus lourd, c'est à éviter.

Bonne continuation
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 6
26 nov. 2004 à 13:32
s'interdire $replace c'est du vice, d'autant que c'est pas très dur a émuler le $replace, c'est juste que c'est très chiant a coder...
sinon j'aime bien :))))
loadation Messages postés 43 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 14 août 2005
26 nov. 2004 à 13:22
y fallai y pense lol

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.