OVH Cloud OVH Cloud

split ?

7 réponses
Avatar
kurtz le pirate
heuu... je sais, j'abuse... pas sur la tête... aie, aie

bon si j'ai :
$toto="<57.0000,10.0000>,<57.0000,25.0000>,<50.0000,40.0000>"

@valeurs = split '?', $toto;

je ne vois pas dutout ce que je dois mettre 'splitter' $toto
afin d'obtenir :

@valeur[0]=<57.0000,10.0000>
@valeur[1]=<57.0000,25.0000>
@valeur[2]=<50.0000,40.0000>



aie...
bon j'arrete pour ce soir :))

7 réponses

Avatar
Denis -esp2008-
Bonsoir,

$toto="<57.0000,10.0000>,<57.0000,25.0000>,<50.0000,40.0000>"
[...]
afin d'obtenir :

@valeur[0]=<57.0000,10.0000>
@valeur[1]=<57.0000,25.0000>
@valeur[2]=<50.0000,40.0000>


Je regrette l'absence d'explode en perl, mais avec split c'est très
simple: @valeur = split ',', $toto

Ça donnera :
$valeur[0]=<57.0000,10.0000>
$vaeur[1]=<57.0000,25.0000>
$valeur[2]=<50.0000,40.0000>

Bonne chance,
--
Denis

Avatar
Jérémy JUST
On Sat, 12 Mar 2005 19:31:54 +0100
Denis -esp2008- wrote:

Je regrette l'absence d'explode en perl


Ça sert à quoi?


mais avec split c'est très simple:
@valeur = split ',', $toto

Ça donnera :
$valeur[0]=<57.0000,10.0000>
^

Non, parce qu'il y a aussi des virgules à l'intérieur de ce qui est
désiré.


Sans split, je propose:

my @valeurs ;
while($toto =~m/(<.*?>)/g)
{push @valeurs, $1 ;
}

--
Jérémy JUST

Avatar
Benoit Izac
Bonjour,

le 12/03/2005 à 19:06, kurtz le pirate a écrit
dans le message :

bon si j'ai :
$toto="<57.0000,10.0000>,<57.0000,25.0000>,<50.0000,40.0000>"

@valeurs = split '?', $toto;

je ne vois pas dutout ce que je dois mettre 'splitter' $toto
afin d'obtenir :

@valeur[0]=<57.0000,10.0000>
@valeur[1]=<57.0000,25.0000>
@valeur[2]=<50.0000,40.0000>


@valeur = split /(?<=>),(?=<)/, $toto;

Note que @valeurs et @valeur sont différents.

--
Benoit Izac

Avatar
Denis -esp2008-
Ça donnera :
$valeur[0]=<57.0000,10.0000>
^

Non, parce qu'il y a aussi des virgules à l'intérieur de ce qui est
désiré.


Effectivement, je n'avais vu que les points

Donc split ("D,", $toto);

(soit toutes les virgules non précédées d'un chiffre).

--
Denis


Avatar
Jérémy JUST
On Sat, 12 Mar 2005 20:56:59 +0100
Denis -esp2008- wrote:

Donc split ("D,", $toto);


À la rigueur

split (/D,/, $toto);

Mais ça ne correspond pas à ce qui est demandé, puisque le chevron est
mangé lors du split.


Sinon, il faut aller vers les assertions de longueur nulle:

split (/(?<=D),/, $toto);

Là, ça commence à devenir plus compliqué que de raison pour le posteur
initial.
Et je m'aperçois que Benoît avait fait une suggestion du même genre,
un peu plus stricte (en vérifiant avant et après la virgule).

--
Jérémy JUST

Avatar
kurtz le pirate
la solution de benoit fonctionne très bien. j'ai pas tout compris mais
bon..

merci à tous de vos réponses.
Avatar
Benoit Izac
Bonjour,

le 13/03/2005 à 06:57, kurtz le pirate a écrit dans le message
:

la solution de benoit fonctionne très bien. j'ai pas tout compris mais
bon..


perldoc perlre,
<http://www.enstimac.fr/Perl/DocFr/perlre.html#motifs%20%E9tendus>

--
Benoit Izac