2 p'tites alias qui trainaient...

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 24 sept. 2007 à 16:27
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008 - 26 sept. 2007 à 18:26
Bonjour, étant donné que je ne peux plus poster dans la catégorie des codes, je pose ici 2 petites aliases (mIRC), en même temps j'accepte toute critique ^^.
Donc je les présente : la première $winsil(), sert à trouver une liste de mot dans une chaine de caractère, j'ai fait ca pour par exemple ceux qui souhaitent trouver les mots (par ex.) "aime" et "pas" dans une même phrase, et bien sur dans l'ordre... cela existe sans doute avec les $regex mais j'en ai jamais entendu parler ^^.
Syntaxe :$winsil(texte,token1*token2*etc,C)
C (facultatif) peut être :
- M -> (cela détecte uniquement les tokens s'ils sont en majuscule)
- m -> minuscule
- o -> ordre alphabétique
- i -> ordre inverse de l'alphabétique.
Résultat : retourne 1 s'il trouve les tokens et 0 dans le cas contraire.
Ils peuvent etre utilisés en même temps (sauf M et m). Et, contrairement a ce que l'on croit, M et m peuvent avoir de l'utilité si on utilise $iif().
Code :
;# $winsil(texte,exp1*exp2*etc,id1 id2 etc)
;# M = majuscules
;# m = minuscules
;# i = inverse alphabétique
;# o = ordre alphabétique
alias winsil {
  unset %winsilpb
  if ($regex($2,/^\|/)) { set %winsilpb $+(",$chr(42),") interdit en début d'expression }
  if ($regex($2,/\|$/)) { set %winsilpb $iif(%winsilpb,$ifmatch //) $+(",$chr(42),") interdit en fin d'expression }
  if (!$gettok($2,2,42)) { set %winsilpb $iif(%winsilpb,$ifmatch //) syntaxe incorrecte }
  if (!$2) { set %winsilpb $iif(%winsilpb,$ifmatch //) aucune expression précisée }
  if ($regex($2,/^[0-9]/) || $regex($2,/\|[0-9]/)) { set %winsilpb $iif(%winsilpb,$ifmatch //) chiffres interdits en début de token }
  if ($regex($3,/m/) && $regex($3,/M/)) { set %winsilpb $iif(%winsilpb,$ifmatch //) identificateurs non compatibles }
  if (%winsilpb) { echo -s - | echo -s * $+($chr(36),winsil()) : %winsilpb $+($chr(40),$2,$chr(41)) | echo -s - | halt }
  unset %winsil* | set %winsil1 $1 | set %winsil2 $2
  if ($3) {
    if ($regex($3,/M/)) { set %winsil3 $addtok(%winsil3,M,46) } | if ($regex($3,/m/)) { set %winsil3 $addtok(%winsil3,m,46) }
    if ($regex($3,/i/)) { set %winsil3 $addtok(%winsil3,i,46) } | if ($regex($3,/o/)) { set %winsil3 $addtok(%winsil3,o,46) }
  }
  if (%winsil3) {
    if ($regex(%winsil3,/M/)) { set %winsil2 $upper(%winsil2) } | if ($regex(%winsil3,/m/)) { set %winsil2 $lower(%winsil2) }
    if ($regex(%winsil3,/i/)) { set %winsil2 $sorttok(%winsil2,42,r) } | if ($regex(%winsil3,/o/)) { set %winsil2 $sorttok(%winsil2,42) }
  }
  tokenize 42 %winsil2
  var %a 1 | while (%a <= $numtok(%winsil2,42)) {
    if ($regex(%winsil1,$+(/,$ [ $+ [ %a ] ],/)) == 0) { return 0 | halt }
    else {
      if (%winsill) && ($findtok(%winsil1,$matchtok(%winsil1,%winsill,1,32),1,32) > $findtok(%winsil1,$matchtok(%winsil1,$ [ $+ [ %a ] ],1,32),1,32)) { return 0 }
      set %winsill $matchtok(%winsil1,$ [ $+ [ %a ] ],1,32)
    }
    inc %a
  }
  return 1
}

La deuxièmre alias est utile pour certains calculs, ici le barycentre. (alias $bary() ).
Elle permet de trouver le barycentre de 2 ou plusieurs point situés dans un repère orthonormé (uniquement). Pas très utile, j'avoue... mais bon, j'avais rien a faire.
Syntaxe : $bary(n,x1,y1,x2,y2,etc,C)
C (facultatif) peut être :
- rien -> retourne 1 si le barycentre est un nombre entier (+ ou -), sinon 0
- s -> retourne les signes des coordonnées du barycentre (ex: + - veut dire que x est positif, et y négatif)
- c -> retourne les coordonnées du barycentre (valeur de x, puis de y, exemple : 1.2 5.4)
Code :
;# $bary(N1,N2,etc,id1 id2 etc)
;# c = coordonnées du barycentre
;# s = signe du barycentre
alias bary {
  if (!$1 || $regex(erreur1,$left($1-,$calc($len($1-) -1)),/([^0-9\s-])/)) { echo -s - | echo -s * $+($chr(36),bary()) : données non valables $iif($1,$+($chr(40),$regml(erreur1,1),$chr(41))) | echo -s - | halt }
  elseif (($chr(46) isin $calc($numtok($1-,32) /3)  && !$regex($right($1-,1),/(c|s)/)) || ($chr(46) isin $calc(($numtok($1-,32) -1) /3) && $regex($right($1-,1),/(c|s)/))) {
    echo -s - | echo -s * $+($chr(36),bary()) : données non valables (syntaxe incorrecte) | echo -s - | halt
  }
  unset %bary*
  var %b 1 | while (%b < $numtok($1-,32)) {
    set %bary [ $+ [ %b ] ] $ [ $+ [ %b ] ] $ [ $+ [ $calc(%b +1) ] ] $ [ $+ [ $calc(%b +2) ] ]
    set %bary.n $iif(%bary.n,$ifmatch) $gettok(%bary [ $+ [ %b ] ],1,32)
    set %bary.x $iif(%bary.x,$ifmatch) $+($gettok(%bary [ $+ [ %b ] ],1,32),*,$gettok(%bary [ $+ [ %b ] ],2,32))
    set %bary.y $iif(%bary.y,$ifmatch) $+($gettok(%bary [ $+ [ %b ] ],1,32),*,$gettok(%bary [ $+ [ %b ] ],3,32))
    inc %b 3
  }
  set %bary.x $calc(( $replace(%bary.x,$chr(32),+) )/( $replace(%bary.n,$chr(32),+) ))
  set %bary.y $calc(( $replace(%bary.y,$chr(32),+) )/( $replace(%bary.n,$chr(32),+) ))
  if ($regex($right($1-,1),/c/)) { return %bary.x %bary.y }  elseif ($regex($right($1-,1),/s/)) { return $iif($left(%bary.x,1) -,-,+) $iif($left(%bary.y,1) -,-,+) }
  else { return $iif($chr(46) isin %bary.x || $v1 isin %bary.y,0,1) }
}

Voila, je les ai testées, elles ont marché, mais on est jamais a l'abri des beugs provisoires ^^.

Une larme peut sécher bien des malheurs... /°/ www.uaipcreations.ovh.com

19 réponses

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
24 sept. 2007 à 16:32
j'ai oublié de préciser que ces aliases ne pouvaient pas êtres utilisées en tant que commandes...
Et veuillez m'excuser pour mes quelques fautes betes (genre des oublis de "s")

Une larme peut sécher bien des malheurs... /°/ www.uaipcreations.ovh.com
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
24 sept. 2007 à 18:08
bonjour,

pour le premier alias
$regex($1-,mot1(.?)+mot2) marche aussi bien je pense non ?
pour le 2iem alias
$regex(erreur1,$left($1-,$calc($len($1-) -1)),/([^0-9\s-])/) <<< y a pas un truc louche dans ca ? c koi erreur1 ? pourkoi les "//" si tu t'en ser pas et pourquoi faire un regex pour verif si c'est bien numérique isnum n'aurait pas suffit ?
et de facon générale je toruve que tu n'utilise pas les regex à propos, ils sont moin rapide que els identifieurs classique genre iswm, isin, isnum donc à utilisé dans le cas de critere de recherches assez spécifik.
ISoKa
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
24 sept. 2007 à 18:46
et bien, je savais que mes aliases existaient deja, mais pas aussi courtes ^^
le $regex($1-,mot1(.?)+mot2) est bien. javais deja vu cette syntaxe mais je ne savais pas que cétait ca. et pour la 2eme alias, l'utilisation des regex est sans doute de trop, mais bon, comme je les utilise peu, fallait que je m'entraine, et le erreur1 est le nom donné au regex, si tu regardes bien, je le réutilise après dans $regml(erreur1,1).
Merci pour ton comm :] (qui d'ailleurs me fait penser que j'ai finalement bousillé quelques minutes/heures a faire un truc qui existait deja ^^)

Une larme peut sécher bien des malheurs... /°/ www.uaipcreations.ovh.com
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
24 sept. 2007 à 18:59
C'est faux, les regexs sont plus lent que les opérateur de mirc tel que iswm, isin etc :)
L'idée du barycentre est pas conne, mais faudrait juste revoir un peu le code
0

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

Posez votre question
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
24 sept. 2007 à 20:37
heu, pour le fait ke les regex soient plus lents c ce ke j'avai di...

ISoKa
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
24 sept. 2007 à 20:48
par contre j'y pense aussi, ayant fait de la mécanique et dc pas mal joué ek les barycentres, il serait pas mal de pouvoir affecter un  poid à tes coordonées de point genre pour trouvé le centre de gravité de differentes masses elementaires juxtaposé et aussi passé en 3D (rajouté l'axe z) ca serai sympa surtout que nivo code ce dernier point te coute vraiment pas grand chose.

ISoKa
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
24 sept. 2007 à 20:59
Aïe, dsl, mal lu :/
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
25 sept. 2007 à 17:58
Erf, isoka, avec ton truc de "poids", tu me fais penser que j'ai fait deux erreurs. deja je me suis trompé, la syntaxe est $bary(n1,x1,y1,n2,x2,y2,etc,C)
et, j'ai oublié de le préciser, n est en effet, comme tu dis, le poids des points.
donc en gros, si par exemple je veux trouver le barycentre de (A,2) de coordonnées (7;5) et (B,3) de coordonnées (6;8) je tape :
//echo -a $bary(2,7,5,3,6,8,c) [ici, avec c pour connaitre les coordonnées] et ca me retourne 6.4 et 6.8 .
euh.. j'ai pas le temps de vérifier si elles sont bonnes (comme je l'ai fait avant de poster la source) mais normalement ca doit bon vu que j'utilise la bête formule Xg = (n(a) x(a) + n(b) x(b)) / (n(a) + n(b)) [n() étant les poids des points].

Une larme peut sécher bien des malheurs... /°/ www.uaipcreations.ovh.com
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
25 sept. 2007 à 18:01
et wims, mouai en effet, la 2eme est mal codée, mais (et ca aussi jai oublié de préciser) je voulais tout regrouper en 1 seule alias ; étant donné que c'est pas très utile, je voulais pas que ce code prenne trop de place x)

Une larme peut sécher bien des malheurs... /°/ www.uaipcreations.ovh.com
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
25 sept. 2007 à 20:49
en mattant rapide moi j'aurai plutot fais kom ca pour le bary mais bon c fai rapide ca peut etre bien amélioré je pense.
alias bary {
  var %h $calc($numtok($1-,32) /4)
  if ($int(%h) != %h) { echo -a erreur de saisie des données pour la fonction $bary veuillez verifier l'entrée. Trop ou pas assez de parametres| halt }
  if (!$regex($1-,^([0-9]+(\.[0-9]+)?(\s[0-9]+(\.[0-9]+)?)+)$)) { echo -a erreur de saisie des données pour la fonction $bary veuillez verifier l'entrée. Entrée non numérique | halt }
  var %i 2 | var %p $1
  var %j 120 | var %k 2
  while (%j >= 122) { var % $+ [ $chr(%j) ] $calc($1 * [ $ $+ [ %k ] ] ) | inc %j | inc %k }
  while (%h >= %i) {
    var %t $calc(((%i -1) *4) +1)
    var %p $calc(%p + [ $ $+ [ %t ] ] )
    var %x $calc(%x + [ $ $+ [ %t ] ] * [ $ $+ [ $calc(%t +1) ] ] )
    var %y $calc(%y + [ $ $+ [ %t ] ] * [ $ $+ [ $calc(%t +2) ] ] )
    var %z $calc(%z + [ $ $+ [ %t ] ] * [ $ $+ [ $calc(%t +3) ] ] )
    inc %i
  }
 var %j 120
  while (%j >= 122) { var % $+ $chr(%j) $calc( [ % $+ [ $chr(%j) ] ] / %p) | inc %j }
  return %x %y %z
}
par contre j'avoue que j'ai pas testé. syntaxe : $bary(p1,x1,y1,z1,p2,x2,y2,z2etc....)
ISoKa
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
25 sept. 2007 à 21:12
d'ailleur ca peut etre raccourci en
alias bary {
  var %h $calc($numtok($1-,32) /4)
  if ($int(%h) !=
%h) { echo -a erreur de saisie des données pour la fonction $bary
veuillez verifier l'entrée. Trop ou pas assez de parametres| halt }
 
if (!$regex($1-,^([0-9]+(\.[0-9]+)?(\s[0-9]+(\.[0-9]+)?)+)$)) { echo -a
erreur de saisie des données pour la fonction $bary veuillez verifier
l'entrée. Entrée non numérique | halt }
  var %i 2 | var %p $1
  var %j 120 | var %k 2
  while (%j >= 122) { var % $+ [ $chr(%j) ] $calc($1 * [ $ $+ [ %k ] ] ) | inc %j | inc %k }
  while (%h >= %i) {
    var %t $calc(((%i -1) *4) +1) | var %p $calc(%p + [ $ $+ [ %t ] ] )
    var %j 120 | var %d 1
    while (%j >= 122) { var % $+ $chr(%j) $calc( % $+ [ $chr(%j) ] ] + [ $ $+ [ %t ] ] * [ $ $+ [ $calc(%t + %d) ] ] ) | inc %j |  inc %d }
    inc %i
  }
 var %j 120
  while (%j >= 122) { var % $+ $chr(%j) $calc( [ % $+ [ $chr(%j) ] ] / %p) | inc %j }
  return %x %y %z
}

ISoKa
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
26 sept. 2007 à 09:52
pas testé non plus, mais j'avoue que ca a l'air mieux codé. par contre dans ce code tu oublies les ids (s pour les signes et c pour les coordonnées). Certes c'est pas très important mais c'est en majeur partie a cause de ca que mon code était assez long et moche. surtout que j'ai mis les coordonées séparées par des virgules, alors que si j'avais $bary(n1*x1*y1*n2*x2*y2*ect,C) ca aurait été plus facile (C = $2).
et j'ai pas compri ce qu'était z dans ton code...
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
26 sept. 2007 à 15:29
ha oui j'ai fai une grosse connerie ^^ pas tenu compte des négatifs dans mon truc de regex :

  if (!$regex($1-,^([0-9]+(\.[0-9]+)?(\s[0-9]+(\.[0-9]+)?)+)$)) { echo
-a erreur de saisie des données pour la fonction $bary veuillez
verifier l'entrée. Entrée non numérique | halt }
devient
  if (!$regex($1-,^(-?[0-9]+(\.[0-9]+)?(\s-?[0-9]+(\.[0-9]+)?)+)$)) { echo
-a erreur de saisie des données pour la fonction $bary veuillez
verifier l'entrée. Entrée non numérique | halt }

là ca devrait etre mieux par contre c vrai ke je tien pas compte de ton truc de S et C pck j'avou ke moi pour les bary y a ke les coord ke j'ai tjs eu besoin :x
ISoKa
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
26 sept. 2007 à 15:36
moi aussi, mais bon, a la base je voulais faire SOIT dans un repere ortho. SOIT dans un plan quelconque (avec la formule vecteur(AG) = (b vecteur(AB) + c vecteur(AC)) / (a+b+c) mais j'ai remarqué que depuis quelques temps, j'apprends pu trop en prog, je reste sur mes acquis, donc j'ai supprimé cete fonction (pas le temps) alors pour rajouter un peu de "dificulté", jai mis S et C, même si l'utilité n'y est pas...
a vrai dire, j'ai de nombreux codes longs et intéressants a finir (des jeux, des applis, etc) mais comme je ne peux pas poster ici et que j'ai pas le courage de finir tout seul... bah je poste des ptites aliases bidons

Une larme peut sécher bien des malheurs... /°/ www.uaipcreations.ovh.com
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
26 sept. 2007 à 15:53
As tu expliqué ton pb a un admin du site pour ce probleme de post ?
Sinon il y a d'autres site de scripting hein...
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
26 sept. 2007 à 18:10
oué clair tu devrais mail un admin c con de pas pouvoir poster surtout que y en a pas mal que j'aimerai voir bloké pour post des sources avant toi :x lol

ISoKa
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
26 sept. 2007 à 18:19
ah, je crois savoir d'ou ca vient :) j'avais demandé a un admin de me supprimer toutes mes sources, et c'est depuis ca que jpeux pu en mettre. sinon, oui j'ai envoyé 40mesages aux amdin,s et sur le forums, dans les posts de beug, je rajoute toujours que je peux pu poster, mais aucune réponse.. pour supprimer mes sources, un admin m'a rep en quelques minutes, par contre pour mon pb, j'ai aucune réponse =/ pas cool...
et non, je préfere poster ici plutot que sur d'autres sites.
isoka tu insinues que tu kiffes me voir bloqué ? :p

Une larme peut sécher bien des malheurs... /°/ www.uaipcreations.ovh.com
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
26 sept. 2007 à 18:21
désolé pour mes fautes, j'ai oublié de me relire

Une larme peut sécher bien des malheurs... /°/ www.uaipcreations.ovh.com
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
26 sept. 2007 à 18:26
heu en faite g di ke y en a pas mal k'il fodrai bloké avant toi pck bon les anti clones et trucs du genre :/

ISoKa
0
Rejoignez-nous