----- Original Message -----
From: "Patrice Karatchentzeff" <patrice.karatchentzeff@???>
To: "guilde" <guilde@???>
Sent: Thursday, November 14, 2002 8:56 AM
Subject: Re: aide sur perl (suite)
| Le Thu, 14 Nov 2002 07:27:19 +0100
| anne.aublanc@??? écrivait :
|
|
| > Me dire comment tester, toujours en perl, une ligne de ce type :
| > xxxxxx;yyyyyyy
| >
| > xxxxx = 1er champ
| > yyyyy = 2ème champ
| >
| > Les champs peuvent contenir n'importe quel caractère sauf le ;
| >
| > Les 2 champs sont séparés par un ;
| >
| > La ligne que j'ai écrite pour le test :
| > if ($ligne =~ m!(.*?);(.*?)$!gi)
|
| . trouve n'importe quel caractère (sauf \n)
| * trouve si 0 occurence (ou plus)
| ? trouve si 0 ou 1 occurence exactement
|
| .*? veut dire : « chaîne de n'importe quoi sauf un retour chariot, au
| besoin rien du tout, d'itération quelconque, présente une fois ou non ».
|
| >
| > cela fonctionnait jusqu'à ce que je rencontre un ' dans un des champs!
| >
|
| Le ' est un caractère interprété par Perl. Si tu le rencontres, tu dois
| aussi le tester :
|
| (.*?)||(\'*?)
|
| cela pour le motif générique « quelque chose (ou pas) suivi ' (ou pas) »
|
| et donc
|
| ((.*?)||(\'*?))*
|
| pour être générique.
|
| donc m/((.*?)||(\'*?))*/((.*?)||(\'*?))*/gi
|
| > Si vous avez la solution...
|
| Il se peut qu'il faille un peu adapter suivant ce que tu cherches
| vraiment...
|
Bon, je teste mais rien ne fonctionne, soit il se bloque sur l'enreg qui a '
, soit il ne trouve rien!
je donne quelques enregs :
anne aublanc;anne.aublanc@???
Jérôme KIEFFER;Jerome.KIEFFER@???
'Jérôme UZEL';jerome.uzel@???
Patrice Karatchentzeff;patrice.karatchentzeff@???
en résultat, je dois avoir :
champ 1 champ 2
anne aublanc anne.aublanc@???
Jérôme KIEFFER Jerome.KIEFFER@???
'Jérôme UZEL' jerome.uzel@???
Patrice Karatchentzeff patrice.karatchentzeff@???
Je peux avoir de 0 à x fois le caractère ' dans la 1ère partie de chaque
ligne avant ;.
Le code de départ :
if ($ligne =~ m!(.*?);(.*?)$!gi)
{
($fullname,$adresse) =
($1,$2);
....
merci
anne