| 1 shgfjgfdj, le 18 jui 2008 à 15:26:15Bonjour,
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[$_] ); Répondre à shgfjgfdj | 2 wafa_o, le 18 jui 2008 à 15:29:40Merci, mais du coup je n'ai plus les '' quand j'affiche chaque valeurs de mon tableau.
Dans $tabFichier[$_] j'ai plusieurs lignes de la forme.
my %toto => ( 'AAAAAA' =>{ 'uuu' => [ 'toto','tata', 'mouloud' ] } ); Répondre à wafa_o | 3 shgfjgfdj, le 18 jui 2008 à 15:34:20A 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 Répondre à shgfjgfdj | 4 wafa_o, le 18 jui 2008 à 15:37:44My %toto => ( 'AAAAAA' =>{ 'uuu' => [ 'toto','tata', 'mouloud' ] } );
Je veux récuperer :
my %toto => (
'AAAAAA'
=>{
'toto'
,
'tata'
,
'mouloud'
]
}
); Répondre à wafa_o | 5 shgfjgfdj, le 18 jui 2008 à 15:52:33Ce 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. Répondre à shgfjgfdj | 6 shgfjgfdj, le 18 jui 2008 à 15:59:41Tu 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. Répondre à shgfjgfdj | 7 wafa_o, le 18 jui 2008 à 16:03:17Et si j'ajoute une commande qui supprime tous les /n avant de faire le split, ca devrait marcher, non? Répondre à wafa_o | 9 shgfjgfdj, le 18 jui 2008 à 16:10:50Avant 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 ^^ Répondre à shgfjgfdj | Ok merci. Pour les )]} ca me le fait automatiquement, le résultat du traitement me convient maintenant.
Pour le \n, est ce que tu as quelque chose à me proposer ?
En tout cas, merci pour tout, je luttait désespéremment à trouver une réponse depuis ce matin. Répondre à wafa_o | 12 shgfjgfdj, le 18 jui 2008 à 17:09:20De rien, si vraiment le \n pose un problème, au pire trouve un autre séparateur que tu es sur de ne pas rencontrer dans tes chaines.
Sinon, si tu veux t'en tenir au \n, plutot qu'un chomp, passe ta chaine dans une regexp qui les supprimera tous:
$chaine=~/\n//g;
et ensuite les deux lignes que je t'avais données pour en faire un tableau. Répondre à shgfjgfdj |
|
|
|
| 8 wafa_o, le 18 jui 2008 à 16:09:35Supprimer le \n avec un chomp ? Répondre à wafa_o | 10 shgfjgfdj, le 18 jui 2008 à 16:12:55Chomp ne supprime le \n que s'il est en fin de chaine, à voir si tu risques d'en avoir ailleurs, à priori non vu que tu récupères une à une les lignes de ton fichier. Donc ça devrait être bon. Répondre à shgfjgfdj |
|
|
|
|
|
|
|