PERL Split

Résolu/Fermé
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 - 18 juil. 2008 à 15:08
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 - 21 juil. 2008 à 10:59
Bonjour,

J'ai besoin de vos lumières svp. J'ai un fichier du type:

my %toto => ( 'AAAAAA' =>{ 'uuu' => [ 'toto','tata', 'mouloud' ] } );

Je voudrais le placer dans un tableau en découpant la ligne en bloc avec ''. J'ai essayé avec split mais ca ne marche pas :

my @tab = split (' ' , $tabFichier[$_] ;


Est ce que vous pouvez m'aider ?
Merci d'avance.
A voir également:

2 réponses

Bonjour,

Dans ta variable $tabFichier[$_] tu as quoi exactement? Quand tu la print par exemple
Sinno la syntaxe du split est mauvaise :
Ecris plutot : my @tab = split (/'/ , $tabFichier[$_] );
0
shgfjgfdj > wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011
18 juil. 2008 à 15:34
A vrai dire je ne suis pas sur de bien voir ce que tu veux récupérer exactement :
Pour la ligne d'exemple que tu as donné, tu pourrais me donner un exemple de ce que tu veux avoir dans ton tableau s'il te plait?

Merci d'avance
0
shgfjgfdj > wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011
18 juil. 2008 à 15:52
Ce n'est pas faisable directement par un split, étant donné qu'il consomme forcément le séparateur qu'on utilise.
Il faudrait soit modifier l'expression avant de la passer au split (par exemple rajouter d'autres caractères servant de séparateurs autout des blocs entre ''), soit ne pas utiliser de split du tout et procéder autrement.

Je regarde vite fait si je trouve quelque chose de simple.
0
shgfjgfdj > shgfjgfdj
18 juil. 2008 à 15:59
Tu peux par exemple essayer quelque chose comme ça :

$tabFichier[$_] =~ s/('.*?')/\n$1\n/g;
@tab = split (/\n/,$tabFichier[$_]);

Après il faut juste être sûr que tu n'auras jamais de \n autre que ceux ajoutés en séparateur.
0
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 2 > shgfjgfdj
18 juil. 2008 à 16:03
Et si j'ajoute une commande qui supprime tous les /n avant de faire le split, ca devrait marcher, non?
0
shgfjgfdj > wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011
18 juil. 2008 à 16:10
Avant l'expression régulière plutot, comme ça effectivement il n'y aura pas de risque de \n supplémentaire.

Sinon si tu veux absolument separer les ) ] } à la fin, tu peux essayer ça aussi :

$chaine =~ s/\s*(=>\s*{|=>\s*\[|=>\s*\(|,|\)|\]|\})\s*/\n$1\n/g;
@tab = split (/\n\n|\n/,$chaine);

Mais c'est moche à lire ^^
0
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 2
21 juil. 2008 à 10:59
Merci
-1