cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008
-
14 juin 2006 à 02:22
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008
-
14 juin 2006 à 18:10
Bonsoir,
j'aurai besoin de vos lumieres :p, en ce moment je bosse sur un truc ou j'aurai absolument besoin par l'utilisation de regexs de comparer des nb. je m'explique, j'ai un nb de referecence, x disons x= 1269854
et je voudrai par regex comparer d'autres chiffres à ce premier pour savoir si ils sont inferieurs ou pas. la premiere idée trés barbare ( mais malheureusement la seule que je voi pour l'instant) c'est de me faire une boucle sur les caracteres de mon nombre pour me crée quelque chose du genre dc:
si x = 1269854
boucle >> [0-1][0-2][0-6][0-9][0-8][0-5][0-3]
puis >> ^([0-1][0-2][0-6][0-9][0-8][0-5][0-3])$
puis ensuite je met ca dans mon regex tt ca tt va bien.
mais le prob c'est que c'est quelque chose qui serai appelé TRES souvent dc bon faire sans arret cette boucle, ca fai un peu "tache" :x si quelqu'un avait une idée je serai preneur ^^
merci d'avance.
ISoKa
cs_PaDa
Messages postés1804Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention22 septembre 20095 14 juin 2006 à 10:55
Après 5 mins de réflexion, non seulement c'est de la folie de faire ca
par regex, mais en plus c'est quasi infaisable proprement : il faut a
minima que les deux nombres comparés soient de même longueur, et même
après ca, la seule facon de faire c'est de barbouiller des tests avant
positifs inclus les uns dans les autres. Puisque pour comparer un
nombre sans modification des deux nombres (passage en binaire par exple
^^) il faut comparer le 1er chiffre, s'il est égal le second, s'il est
égal le 3e etc. Tu vas vraiment te faire chier, y'aura des "yes/no" de
partout, et même pas certain que ce soit faisable... En terme de
performance, c'est vraiment de toute facon.. Tu vas faire exploser ton
mIRC dès qu'yaura quelques centaines d'items.
Bref, ce n'est pas parce qu'un code est petit qu'il est meilleur ;) et
ce n'est pas parce que les regex c'est super mega top, que c'est
forcément adapté à toutes les situations. ^^ En l'occurence, tu as
plein de facons de faire ton truc, mais à la main ca me parait optimal
! En créant une seconde table qui indexe la première dans l'ordre, ca
devrait aller tout seul. Ensuite, à chaque modif de la première, tu
modifies la 2e : ca devrait consister à insérer ou effacer une clé "N".
Ensuite, de N+1 jusqu'à la valeur max tu réindexes correctement, ca
sera rapide et efficace ;) Dis moi si tu veux un exemple, je posterai
ca ici...
Autre soluce astucieuse : utiliser une @window triée, mais tu auras
surement une limite sur le nombre de ligne, au dessus de 3 ou 4000 le
buffer doit être tronqué je pense..
cs_tofu
Messages postés1726Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention13 juin 20091 14 juin 2006 à 03:02
il me semble (je voudrai pas dire de bêtise) que les regexp sont bcp plus lents que les commandes dîtes "normales donc si au final c'est pour une utilisation assez intensive, il vaudrait peut-être mieux te tourner vers des hashtables et un simple while pour comparer les nombres?
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 14 juin 2006 à 03:41
en faite, ce regex c'est justement avec des htables que je l'utilise, cad : j'enregistre des items dans mon htable sous forme de chiffres et ensuite j'ai besoin regulierement de chopper les data associées à mes items si jamais le nom de l'item, donc le nombre est inferieur à une valeur donnée. donc je le fai par $hfind en faite du style:
si x = 1269854
boucle >> [0-1][0-2][0-6][0-9][0-8][0-5][0-3]
puis >> ^([0-1][0-2][0-6][0-9][0-8][0-5][0-3])$
var %i 1
while ($hfind(ma-table,^([0-1][0-2][0-6][0-9][0-8][0-5][0-3])$,0,r) >= %i) {
action blablabla
inc %i
}
voila je sai pas si je suis plus claire :x. par contre il me semblait que les regexs c'etait super rapide moi.
ISoKa
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 14 juin 2006 à 03:59
bin en faite, dans ma htable en nom d'itemps y a pleins de nb, donc j'aimerai autant que possible pouvoir faire un tri par le $hfind pour n'avoir que les nb inferieurs à ce que je cherche, il me semble justement qu'avec le $hfind et un regex bien posé ca serai carrement plus optimal que me taper toute ma table pour verif chaque nom d'item. Enfin je pense
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 14 juin 2006 à 04:12
en faite ma table serai du style:
125454534 : bla
121534444 : blabla
125871126 : blablabla
etc....
donc si ma table venait à grossir, si je doit me taper à chaque fois la table entiere pour verif un par un mes trucs j'trouve pas ca super joli en faite :x c'est pour ca que le $hfind par regex me semblait bcp plus "élégant" ( les regexs franchement c'est lourd quand on s'y met mais aprés c kiffant ce qu'on peu faire avec :p)
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 14 juin 2006 à 06:38
lol merci, en plus j'vien de me rendre compte que mon regex que j'avai fai est faut :/ faut que je toruve autre chose comme regex pour verif si un nb est plus petit qu'un autre, c'est plus compliqué que je pensai
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 14 juin 2006 à 13:42
justement quand je me suis rendu à quel point mon premier regex etait tout pourri :p j'ai cherché comment le faire et je suis parti sur les conditions "yes no" et j'ai vu que ca devenait vite imbitable, mais comme je debute en regex et que c'est finalement à priori une fonction assez conne à faire "x>y" me suis di que certaienement quelqu'un de plus pointu en regex aurait surement une solution plus simple, apparement toi non plus tu vois pas ( merci d'avoir cherché :p) par contre pour le coup de la table d'indexation oué je dirai pas non pour un exemple pck je voi pas trop le principe de ce truc. pour le coup de la window c'est pas bete du tout oué et j'm bien le principe surtout que comme tu dis, c'est astucieux :p ma table ne montera jamais je pense à des valeur touchant les milliers, au pire quelques centaines et encore je suis pas certain. (j'aurai pu tester toute la table peut etre mais tant qu'a faire j'essai de me perfectioner :p). Enfin bref OUI je veu bien un exemple de ta table d'indexation, et je vai matter pour le coup de la windows en mm temps pck j'trouve cette idée surper sympa :p
Merci de vos aides :)
ISoKa
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 14 juin 2006 à 14:10
En reflechissant je croi que j'ai compri ton truc d'indexation:
en faite j'ai une hash dedans je met mes trucs, genre:
569871:bla
96471:blabla
7896321:blablabla
et une seconde qui alors fait:
1:96471
2:569871
3:7896321
je boucle sur la premiere et comme c'est rangé, dés que ma condition de boucle, genre inférieur à mon chiffre donné n'est plus validé j'ai non seulement le nb d'items que je veux mais leur noms ausi et surtout en ayant minimalisé le nb de tests si j'ai bien compri. oué ca parai sympa :p. bon bin j'essaie de voir dans ce sens et valide si ca résoud mon prob :p
mici ^^
ISoKa