Problème dans la gestion d'une liste

Résolu
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007 - 19 oct. 2005 à 21:50
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007 - 23 oct. 2005 à 10:39
Bonsoir

J'ai une liste dont les éléments sont séparés par un ;
Dans cette liste, j'ai parfois un élément vide...
Exemple:
Pierre;Martine;;Manon

Dans ce cas, il semble que CF ne compte pas l'élément vide... C'est très gênant pour moi.

Y a-t'il une solution autre que d'utiliser une liste
Pierre;Martine; ;Manon ?

D'avance, merci pour vos conseils et astuces.

Pierre Fauconnier

12 réponses

cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
21 oct. 2005 à 23:53
D'ailleurs il y a même des livres sur le sujet



Avant d'aller te perdre sur le net, tu peux aussi utiliser la doc en
ligne de Coldfusion qui est pas mal fournie (dans la partie Developing
ColdFusion MX Applications > Using Regular Expressions in Functions).

Tu verras, ce que j'ai utilisé y est expliqué.



Si tu veux avoir des tonnes d'explications sur les regexp tu peux aussi
chercher dans la doc de PERL, où les regexp sont trés utilisées.
Attention cependant, les langages ont souvent une implémentation
spécifique (une backreference en perl est $1, je crois et en CF c'est
\1 , par exemple)



alors 'tite explication:

\A : en debut de regexp, indique que c'est le debut de chaine, le fait
de le mettre entre parethèse le fait être considéré comme un groupe
d'expression

(?=;) : signifie 'suivi de ;' Les parenthèses ici sont obligatoire et
n'en fait pas un groupe (important à savoir pour les histoires de
références).

(\A)(?=;) signifie donc début de chaine suivi d'un ; (attention, ça ne
veut pas dire début de chaine commençant avec un ; .. petite nuance qui
fait la différence en regexp)

| : signifie Ou

(;) : pour chercher un ; et le référencer en tant que groupe

$ : en fin de regexp, indique en fin de chaine



\x, où x est un chiffre, reférence correspondant au groupe dans l'ordre
à l'intérieur de la regexp. Permet ainsi de réafficher l'expression
trouvée (donc soit début de chaine avec (\A) qui est le premier groupe
soit (;) avec \2 et \3 qui sont groupes 2 et 3



Donc la regexp signifie Recherche

soit :

- un debut de chaine, suivi d'un ;

- un ; suivi d'un autre ;

- un ; en fin de chaine

et les remplace par eux même, avec un espace après.
3
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
19 oct. 2005 à 22:21
Tu as le choix entre deux replace imbriqués l'un dans l'autre, soit un
REReplace avec l'expression régulière k'une dure journée de labeur
m'empeche de te fournir.

donc à titre pallaitif fais replace(';;','; ;',replace(';;',';
;',toto)).. Par contre attention à lam ontée en charge en fonciton de
ta chaine.

S.



PS: dans le REReplace tu dois avoir un [;]{2}+ il me semble..

bouh, mes yeux se ferment tout seul..

S.
0
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
20 oct. 2005 à 01:42
bon, voilà de quoi résoudre le problème

rereplace(liste,'^(?=;)|;(?=;)|;$','; ','ALL')



traduction :

si la chaine commence par rien, suivi d'un pointvirgule(bref commence
par un point virgule ,mais ici il est important de dire que ça commence
par rien), ça remplace le rien par un point virgule plus un espace
(pour pouvoir compter l'éléement)

si il y a un point virgule, suivi d'un autre point virgule, ça remplace
le premier point virgule par un point virgule plus un espace

si la chaine fini par un point virgule, ça le remplace par un point virgule suivi d'un espace



Attention cependant, de ne pas itérer ce remplacement, car si le
premier éléement est vide, cela rajoutera un élément vide en plus au
début à chaque itération...
0
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
20 oct. 2005 à 02:02
allez ! pareil, mais en mieux :



rereplace(liste,'(\A)(?=;)|(;)(?=;)|(;)$','\1\2\3 ','ALL')



cette fois pas de problème d'itération...
0

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

Posez votre question
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
20 oct. 2005 à 06:42
Y'a pas à dire.. Vive les expressions régulières. J'ai tendance à perdre la main kan je les utilise plus pendant un moment..

Mais c'est marrant, ça donne l'impression d'etre un extra-terrestre en les comprenant..

S.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
20 oct. 2005 à 10:38
qu'est-ce qui dit lol
0
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
20 oct. 2005 à 10:50
Je ne viens pas d'ailleurs alors ???
c'est vrai que mes collègues me trouvent bizarre dés que je m'exprime régulièrement (euh... non.... dés que j'utilise des expressions régulières.... quoique... si quand même.. dans les deux cas )
0
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007
21 oct. 2005 à 11:21
Merci et ... chapeau... Cela fonctionne...

Cela étant, je ne la comprends pas ...

Dans l'aide de dreamweaver, point de
0
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007
21 oct. 2005 à 11:23
Chapeau et merci

Cela étant, je ne comprends pas l'expression régulière...

Dans l'aide de Dreamweaver, point de \A, de (?=$) et autres...

Pourrais-tu me l'expliquer en détails?

En tout cas, merci infiniment. Je ne connaissais pas les expressions régulières et, suite à ta réponse, j'ai envie de m'y mettre car c'est manifestement puissant...

A très bientôt

Pierre
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
21 oct. 2005 à 11:39
Il ne s'agit pas d'une solution Dreamweaver, c'est une fonction qui existe dans différents language de programmation, Java, JavaScript, VB, Php...
On pourrait écrire un livre sur le sujet !
Pour te donner une idée de l'ampleur et des possibilités va déjà voir ceci :
http://www.commentcamarche.net/javascript/jsregexp.php3
C'est assez basic mais ça te donnera déjà une idée du problème !

ou fait une recherche de "regexp" sur google.

Nickadele
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
22 oct. 2005 à 08:55
Ca mérite que la réponse soit acceptée..

Pour /A j'utilisais le ^, je me coucherai moins bete ce soir.. Pourkoa
j'ai po des projets ki demandent plus d'expressions régulières..
Bouuuuh...

S.
0
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007
23 oct. 2005 à 10:39
Super grand merci...

Je suis allé voir la doc de ColdFusion, et avec tes explications, je commence à m'y retrouver...

C'est très puissant, manifestement.

Merci encore pour l'aide apportée et le temps consacré, et bon week-end.

Pierre
0
Rejoignez-nous