Regex pour comparer 2 nombres. [Résolu]

cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 02:22 - Dernière réponse : cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

20 réponses

Meilleure réponse
cs_PaDa 1804 Messages postés mardi 15 juillet 2003Date d'inscription 22 septembre 2009 Dernière intervention - 14 juin 2006 à 10:55
3
Merci
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..

Merci cs_PaDa 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de cs_PaDa
cs_tofu 1726 Messages postés vendredi 12 septembre 2003Date d'inscription 13 juin 2009 Dernière intervention - 14 juin 2006 à 03:02
0
Merci
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?
    

Commenter la réponse de cs_tofu
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 03:41
0
Merci
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
Commenter la réponse de cs_ISoKa
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 03:46
0
Merci
Oups manque une parenthese bien sur dans mon while ^^

ISoKa
Commenter la réponse de cs_ISoKa
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 03:48
0
Merci
ha non merde il est bon :x
/me kiff poster de facon inutile...

ISoKa
Commenter la réponse de cs_ISoKa
cs_wims 2473 Messages postés vendredi 23 juillet 2004Date d'inscription 1 août 2010 Dernière intervention - 14 juin 2006 à 03:55
0
Merci
pourquoi ne pas utiliser > et < ?

var %x 158962179

apres tu fait le if que tu veux dessus, ou est le pb ?
Commenter la réponse de cs_wims
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 03:59
0
Merci
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

ISoKa
Commenter la réponse de cs_ISoKa
cs_wims 2473 Messages postés vendredi 23 juillet 2004Date d'inscription 1 août 2010 Dernière intervention - 14 juin 2006 à 04:08
0
Merci
ben non cmt est composé ta table ?

sufit de trier chaque chaque valeur de chaque item avec un ptit $addtok/$sorttok

et ensuite tu regarde par rapport au nombre ,tu fait ce que tu veux en
consequence et terminé ( oui je connais rien au regex ) :)
Commenter la réponse de cs_wims
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 04:12
0
Merci
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)

ISoKa
Commenter la réponse de cs_ISoKa
cs_wims 2473 Messages postés vendredi 23 juillet 2004Date d'inscription 1 août 2010 Dernière intervention - 14 juin 2006 à 04:25
0
Merci
Ben pour les regex je pourrais pas t'aider de toute facon

En revanche il suffit de boucler sur la table et de comparer...
Commenter la réponse de cs_wims
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 05:42
0
Merci
oué mais justement c'est ce que je voudrai éviter :p

ISoKa
Commenter la réponse de cs_ISoKa
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 05:43
0
Merci
en tout cas c'est sympa d'avoir cherché ;)

ISoKa
Commenter la réponse de cs_ISoKa
cs_wims 2473 Messages postés vendredi 23 juillet 2004Date d'inscription 1 août 2010 Dernière intervention - 14 juin 2006 à 06:17
0
Merci
J'ai pas cherché mdr, ca me parais evident
Commenter la réponse de cs_wims
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 06:38
0
Merci
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

ISoKa
Commenter la réponse de cs_ISoKa
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 13:42
0
Merci
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
Commenter la réponse de cs_ISoKa
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 14:10
0
Merci
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
Commenter la réponse de cs_ISoKa
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 14:12
0
Merci
oups je boucle sur la seconde bien sur.

ISoKa
Commenter la réponse de cs_ISoKa
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 14:26
0
Merci
j'vien d'essayer de codé ca et ca semble nickel ^^ merci bcp j'y avai grave pas pensé à la table d'indexation :/. je valide ta réponse ^^

ISoKa
Commenter la réponse de cs_ISoKa
cs_PaDa 1804 Messages postés mardi 15 juillet 2003Date d'inscription 22 septembre 2009 Dernière intervention - 14 juin 2006 à 17:08
0
Merci
lol ok, je fais pas de code alors :)

a bientot

Pada
Commenter la réponse de cs_PaDa
cs_ISoKa 437 Messages postés jeudi 27 avril 2006Date d'inscription 17 octobre 2008 Dernière intervention - 14 juin 2006 à 18:10
0
Merci
ouai ca va c'est pas infaisable comme truc ^^  c'est juste que j'avai grave pas eu cette idée :/
see ya
ISoKa
Commenter la réponse de cs_ISoKa

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.