Rechercher : dans
Par :

PERL Split

Dernière réponse le 21 jui 2008 à 10:59:41 wafa_o, le 18 jui 2008 à 15:08:46 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « PERL Split » dans :
Javascript - split() VoirLa fonction split() permet de scinder une chaîne de caractère et de retourner les résultats dans un tableau, grâce à une chaîne définie comme séparateur. Dans l'exemple ci-dessous, la fonction split() permet de découper la date selon le caractère...
Télécharger Split Browser VoirPour comparer des pages web, il faut ouvrir toutes le fenêtres contenant les pages et d'essayer de les redimensionner pour les placer cote à cote. Cette tâche est assez laborieuse et pas très intelligente. Split Browser est une extension Firefox...
Perl - Les fichiers VoirLa notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...
Perl - Caractéristiques du langage VoirFichier source, et interprétation Le fichier source d'un programme écrit en Perl est un simple fichier texte dont l'extension est par convention .pl. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un fichier texte dans sa...
Les variables avec Perl VoirConcept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois...

1

shgfjgfdj, le 18 jui 2008 à 15:26:15

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[$_] );

Répondre à shgfjgfdj

2

wafa_o, le 18 jui 2008 à 15:29:40

Merci, 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:20

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

Répondre à shgfjgfdj

4

wafa_o, le 18 jui 2008 à 15:37:44

My %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:33

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.

Répondre à shgfjgfdj

6

shgfjgfdj, le 18 jui 2008 à 15:59:41

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.

Répondre à shgfjgfdj

7

wafa_o, le 18 jui 2008 à 16:03:17
  • +1

Et 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:50

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 ^^

Répondre à shgfjgfdj

11

wafa_o, le 18 jui 2008 à 16:15:50

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:20

De 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:35

Supprimer le \n avec un chomp ?

Répondre à wafa_o

10

shgfjgfdj, le 18 jui 2008 à 16:12:55

Chomp 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

13

 wafa_o, le 21 jui 2008 à 10:59:41

Merci

Répondre à wafa_o