Problème dans la gestion d'une liste [Résolu]

Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 19 oct. 2005 à 21:50 - Dernière réponse : Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention
- 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
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
cs_bastoun 164 Messages postés dimanche 1 octobre 2000Date d'inscription 23 mars 2007 Dernière intervention - 21 oct. 2005 à 23:53
3
Merci
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.

Merci cs_bastoun 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de cs_bastoun
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 19 oct. 2005 à 22:21
0
Merci
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.
Commenter la réponse de syndrael
cs_bastoun 164 Messages postés dimanche 1 octobre 2000Date d'inscription 23 mars 2007 Dernière intervention - 20 oct. 2005 à 01:42
0
Merci
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...
Commenter la réponse de cs_bastoun
cs_bastoun 164 Messages postés dimanche 1 octobre 2000Date d'inscription 23 mars 2007 Dernière intervention - 20 oct. 2005 à 02:02
0
Merci
allez ! pareil, mais en mieux :



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



cette fois pas de problème d'itération...
Commenter la réponse de cs_bastoun
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 20 oct. 2005 à 06:42
0
Merci
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.
Commenter la réponse de syndrael
nickadele 1253 Messages postés mercredi 7 août 2002Date d'inscription 10 avril 2013 Dernière intervention - 20 oct. 2005 à 10:38
0
Merci
qu'est-ce qui dit lol
Commenter la réponse de nickadele
cs_bastoun 164 Messages postés dimanche 1 octobre 2000Date d'inscription 23 mars 2007 Dernière intervention - 20 oct. 2005 à 10:50
0
Merci
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 )
Commenter la réponse de cs_bastoun
Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 21 oct. 2005 à 11:21
0
Merci
Merci et ... chapeau... Cela fonctionne...

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

Dans l'aide de dreamweaver, point de
Commenter la réponse de Pierre_faucon
Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 21 oct. 2005 à 11:23
0
Merci
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
Commenter la réponse de Pierre_faucon
nickadele 1253 Messages postés mercredi 7 août 2002Date d'inscription 10 avril 2013 Dernière intervention - 21 oct. 2005 à 11:39
0
Merci
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
Commenter la réponse de nickadele
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 22 oct. 2005 à 08:55
0
Merci
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.
Commenter la réponse de syndrael
Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 23 oct. 2005 à 10:39
0
Merci
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
Commenter la réponse de Pierre_faucon

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.