begin process at 2010 02 10 10:07:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

IRC

 > 

Scripting

 > 

Général

 > 

probleme avec un mechant IF


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme avec un mechant IF

vendredi 4 août 2006 à 13:43:45 | probleme avec un mechant IF

hisoka2501

voila j'explique le probleme:

if ($calc($ctime - $gettok($hget(%table2,$gettok(%item,1,64)),8,32)) <= %max || !%max) && ((!$did(107).state  && %tok iswm $gettok(%data,1,1)) || $did(107).state)  {

ca c ma vilaine ligne qui foire donc:
quand $did(107).state == 0 ca va mais quand = 1 ca marche pas
tout le reste est bonc apres les deux premiers && que je n'men sors plus
le bout de code:

 elseif ($did == 18) {
      bdid 18
      rdid 19
      if ($did(17)) {
        var %fast = 1 , %table = wbs.xdcc.data , %table2 = wbs.xdcc.list
        if ($wget(wbs.xdcc.show.only.time.less) == 1) { var %max = $did(79)  }
        hadd -m wbscfg Xdcc.lastsearch $did(17)
        wbssave wbscfg
        var %tok = $iif($did(107).state,$did(17),$+(*,$replace($strip($did(17)),$chr(95),*,$chr(32),*),*)) , %n  = $hfind(%table,$iif($did(107).state,%tok,$+(*,%tok,*)),0,$iif($did(107).state,r,w)).data , %i = 1 , %smax = $wget(xdcc.size.val)      
        adid 30 0 0 %n
        if ($remove(%smax,-) !isnum) w.err Erreur: Format invalide
        else {
          var %smode = $wget(xdcc.size.mode)
          if (%smode != 4) var %smax = $remove(%smax,-)
          while (%i <= %n) {
            var %item = $hfind(%table,$iif($did(107).state == 1,%tok,$+(*,%tok,*)),%i,$iif($did(107).state == 1,r,w)).data , %data = $hget(%table,%item)
            if ($calc($ctime - $gettok($hget(%table2,$gettok(%item,1,64)),8,32)) <= %max || !%max) && ((!$did(107).state  && %tok iswm $gettok(%data,1,1)) || $did(107).state)  {
              var %tsize = $remove($gettok(%data,2,1),]) , %fsize = $remove(%tsize,[,M,K,o,b)
              if ($right(%tsize,1) == K) var %fsize = $calc(%fsize * 1024)
              elseif ($right(%tsize,2) == gb) var %fsize = $calc(%fsize / 1024)
              if ((((!%smode)) || ((%smode == 1) && (%fsize <= %smax))) || (((%smode == 2) && (%fsize >= %smax))) || ((%smode == 3) && (%fsize == %smax)) || ((%smode == 4) && (%fsize >= $gettok(%smax,1,45)) && (%fsize <= $gettok(%smax,2,45))))  adid 19 $gettok(%item,1,64) $chr(9) $gettok(%item,2,64) $chr(9) $gettok(%data,1,1) $chr(9) $gettok(%data,2,1)       
            }
            idid 30 1 %i
            inc %i
          }
        }
      }
      edid 18
      halt
    }

( le halt en fin de code c'est pck le $did(18) c'est le bouton OK donc je ne veu pas fermer le dialog mais concerver ke fait que quand je fasse ENTER ca le clique )

je sais qu'il y a la beaucoup d'aliases que je n'ai pas expliqué mais les expliquer une a une prendrais beaucoup trop de place sur ce topic, toutefois je peu affirmer qu'aucune d'entre elle n'est en cause le probleme vient juste du IF cité en premier (de sa partie droite) mais je n'arrive pas a trouver la solution exacte, je souaite juste implementer la gestion des regex pour mon moteur de recherche xdcc :)


sinon j'aurais aussis une question auxiliaire:
sous mirc 6.2 est il possible de deplacer la switch bar via une commande ? genre: movebar left/top/right/down

merci d'avance :)

la mémoire ne peut etre définie mais elle definie l"humanitée (G.I.T.S)
vendredi 4 août 2006 à 14:01:34 | Re : probleme avec un mechant IF

RCA ArKanis

quand tu as des problèmes avec des parenthèses, le mieux c'est de respecter le plus possible la syntaxe "normale"
càd : if (...) || (...) devient :
if ((...) || (...))

on a déjà testé quelques codes avec les deux formes, on en a déduit qu'elles ne sont pas tout le temps équivalentes

essaye de mettre ça :
if ((($calc($ctime - $gettok($hget(%table2,$gettok(%item,1,64)),8,32)) <= %max) || (!%max))) && (((!$did(107).state) && (%tok iswm $gettok(%data,1,1))) || ($did(107).state))  {

c'est moche ouais, mais ça a plus de chances de fonctionner :)
tu peux aussi essayer de mettre en variables quelques résultats, comme le $calc($ctime - $gettok($hget(%table2,$gettok(%item,1,64)),8,32))


Sinon :
if ($wget(wbs.xdcc.show.only.time.less) == 1) { var %max = $did(79)  }
il me semble que quand il n'y a qu'une action, mettre les { } ralenti le code


assez dur à lire quand même ton code :p
vendredi 4 août 2006 à 14:19:02 | Re : probleme avec un mechant IF

hisoka2501

vi je sais je devais l'épurer de ce coté la pour les { }
metre des resusltats en variable ne me parais pas une bonne solution car cela risque de ralentir le code ( je suis a l'interieur d'une boucle pouvant depasser les 2000 iteration, sous mirc c'est beaucoup)

j'ai tenté de metre la ligne que tu m'a donné, ca me ramene au meme probleme, ca ne marche pas avec le regex, en mode normal ca marche mais pas en regex

j'ai meme réésayer de metre un echo sur %item et $gettok(%data,1) et rien:

%item = [Yoso]`OST`@1
$gettok(%data,1,1) = [Yoso] .hack Liminality - OST 1.zip

( la bdd est séparée en deux, une qui gere les listes et contenu des bots (Nb de paquets, derniere maj et tt) et l'autre qui continen tt les info des packs))

la mémoire ne peut etre définie mais elle definie l"humanitée (G.I.T.S)
vendredi 4 août 2006 à 14:41:12 | Re : probleme avec un mechant IF

PaDa

Membre Club
C'est illisible.. J'aimerais pas être le parser de conditions de mIRC.. :x

if ($calc($ctime - $gettok($hget(%table2,$gettok(%item,1,64)),8,32)) <= %max || !%max) && ((!$did(107).state  && %tok iswm $gettok(%data,1,1)) || $did(107).state)  {

deviendrait, chez moi :

var %e1 = $hget(%table2,$gettok(%item,1,64))
var %e2 = $calc($ctime - $gettok(%e1,8,32))
var %c1 = $iif(%e3 <= %max,1,0)
var %c2 = $iif(!%max,1,0)
var %c3 = $iif(!$did(107).state,1,0)
var %c4 = $iif(%tok iswm $gettok(%data,1,1),1,0)
if (  (%c1 || %c2) && ((%c3 && %c4) || !%c3)  ) { ... }

Je n'ai pas trop compris ou les regex intervenaient, je n'ai pas décortiqué le code (trop dur à lire..), mais si je peux t'aider n'hésite pas..

PaDa
vendredi 4 août 2006 à 14:43:31 | Re : probleme avec un mechant IF

PaDa

Membre Club
Oups, %e2 pas %e3 dans le %c1, et possible que mIRC parse mal le %c4, à tester.. Le but n'étant pas d'écrire un code en un minimum de ligne... :x
vendredi 4 août 2006 à 16:03:41 | Re : probleme avec un mechant IF

wims

moi je ferai comme pada en mettant dans des variables en rajoutant le switch -s pour voir ce qui est bien "setté".
ensuite je mettrai un echo de la ligne du if sans les parentheses et le if qui suit.:


var %e1 = $hget(%table2,$gettok(%item,1,64))
var %e2 = $calc($ctime - $gettok(%e1,8,32))
var %c1 = $iif(%e2 <= %max,1,0)
var %c2 = $iif(!%max,1,0)
var %c3 = $iif(!$did(107).state,1,0)
var %c4 = $iif(%tok iswm $gettok(%data,1,1),1,0)
echo -a if ((  %c1 ou %c2 ) et si %c3 et %c4 ) ou si ! %c3 alors ca passe
if (((%c1 || %c2) && %c3 && %c4)) || (!%c3) { ... }

apres sinon, met tes conditions sur plusieurs lignes

if (%c1 || %c2) {
if (%c3 && %c4) echo -a ca passe
}
elseif (!%c3) echo -a ca passe aussi
else echo -a ca passe pas
}



bonne chance :(
vendredi 4 août 2006 à 16:35:25 | Re : probleme avec un mechant IF

hisoka2501

je sais deja ou ca plante moi :/
de plus un code crade et difficil a lire n'est pas forcement dur a executer pour mirc
declarer des tas de variables en revanches , au sein d'une boucle qui plus est pour perdre du temp inutilement je ne pourais guerre faire mieux :/
la seulle erreure apparement est dans la condition en elle meme mais bon
je vois ca tt a leur je suis trop OQP avec une aliace la :/

a savoir:
alias wexp.pos {
  ;retourne la Nieme position d'une écritrue abregée ex: $wexp.pos(8-20,2) retourne => 10
  if ($2) {
    var %param = $2 , %i = 1 , %input = $1
    tokenize $asc(-) $1
    while ($gettok($1-,%i,32) < %param) inc %i
    return $calc($gettok($1-,%i,32) + %param -1 - $mgettok(%input,$calc(%i -1),32,2,45))
  }
}

($mgetttok() permet d'imbriquer proprement plein de gettok)

enfin je ne vais pas m'ecarter du sujet qui reste éviedment le meme :(
ma conditionele qui ne marche pas
é par pitiée arretez de me dire de declarer 3 tonnes de variables pour rien ca ne fera que ralentire le code monstrueusement



Je n'ai pas trop compris ou les regex intervenaient, je n'ai pas décortiqué le code (trop dur à lire..), mais si je peux t'aider n'hésite pas.. << dans le $hfind

var %item = $hfind(%table,$iif($did(107).state == 1,%tok,$+(*,%tok,*)),%i,$iif($did(107).state == 1,r,w)).data

la mémoire ne peut etre définie mais elle definie l"humanitée (G.I.T.S)
vendredi 4 août 2006 à 16:49:14 | Re : probleme avec un mechant IF

wims

La déclaration de variable sert a debugué le code et non a le ralentir, tu préferes savoir pourquoi le code marche pas et que ca aille moins vite pour l'instant ou que ca speed et que ca marche pas :) ?

La vilaine ligne retourne une erreur ? Tu es sur que tout les variables existent ?

pour la switchbar, non la commande n'existe pas malgré que cela ai été demandé
vendredi 4 août 2006 à 17:09:49 | Re : probleme avec un mechant IF

PaDa

Membre Club
Si t'es à la ms près.. change de langage :x
Les vars locales ca ralentit peanuts, par contre pour le parser mirc grouper comme il faut 6-7 conditions je doute que ce soit si rapide que ca.. Si j'ai le temps ce ouik end, j'essaierai de faire un ptit bench pour voir :-)
Bref les codes crades, je trouve ca insupportable à maintenir et lire.. enfin c'est ta vie tu fais ce que tu veux ;-))
Syntaxiquement, mon code est correct et ne "plante" pas, à toi de voir ce que tu veux.


Pour le hfind, tu peux me montrer le genre de masque qui est passé en argument ? La je vois que c'est des trucs dynamiques, c'est assez lourdingue en regex, faut bien penser à échapper les métachar..


PaDa
vendredi 4 août 2006 à 18:32:53 | Re : probleme avec un mechant IF

hisoka2501

en regex c'est ce que l'utilisateur entre das $did(17) qui est pris en compte, pour ma part "hack" (pour [Yoso] .hack Liminality - OST 1.zip)

$regex([Yoso] .hack Liminality - OST 1.zip,hack) << ca retourne 1
pourtant ca ne passe pas dans la conditionele

la mémoire ne peut etre définie mais elle definie l"humanitée (G.I.T.S)

1 2

Cette discussion est classée dans : var, did, xdcc, fsize, smax


Répondre à ce message

Sujets en rapport avec ce message

pourquoi ma variable ne se désintalle pas??? [ par _Dams_ ] bonjour à tous,tout est dans le titre et voice mon code :on *:dialog:canaux:sclick:39:{ var %a 100 var %b 105 var %num 1 while (%a if ($did(%a Hdel qui marche pas [ par wims ] Voila je realise un lecteur mp3 en ce moment et il y a un probleme lorsque je ve supprimer un mp3 : il ne supprime pas la ligne de ma list mais il la aide pour sw [ par [thomas95 ] Bonjour ...voila jai télécharger se code sur un site mais le probleme est a la ligne 49 seulement je ne detecte pa le probleme si quelqu'un pourrais m Activer/désactiver dans un input [ par Camanche ] Bonjour, je cherche désespéremment la condition à mettre dans mon input pour savoir si l'addon est activé ou pas. Voici le code: alias cor { dialog - Treeview [ par Doudis ] Bonsoir j'ai eu petit probleme en créant une treeview  ,  je n'arrive  pas a retourner avec $did  le texte qui se situe dans la treeview voila mon co dialog [ par eyrgo ] Bonjour,je suis bloquer dans mon code.J'aimerai que, X recoivent les infos de Y. comme un whois sous forme de dialog. dialog mdiu {  title "Infor utilisation des rawmode [ par kraos ] bonjour, et merci pour les réponses si elles arrivent !!voila mon pb je recherche e l'aide pour créer un remote permettant de gérer un bot sur un chan avoir plusieurs d'espace en $chr(32) [ par WorldDMT ] Salutje cherche a savoir comment peut on avoir plus d'espace pour un ajout sur une list dans un dialogexp: si ID1 = A  ,  ID2 = B  , ID3 = Cdid -a</fo un petit probleme de code IRC [ par WorldDMT ] salutj'ai un fichier qui contien[nom]1=mot1 .20/02/2008.mot22=mot1.22/02/2008.mot23=mot1.01/03/2008.mot2dialog $did(2) = mIRC - $ialchan [ par WorldDMT ] salutjuste une petite questionon *:ban:#:{  var %i $ialchan($banmask,#,0).nick  while (%i) { var %valn %valen $ialchan($banmask,#,%i).nick,%v %v -1 } 


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales